举个栗子

马辰龙De技术分享
posts - 23, comments - 0, trackbacks - 0, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

公告

求两个字符串最大公共字符串(听说是微软几年前面试题)

Posted on 2016-07-11 10:51 ChenlongMa 阅读(...) 评论(...) 编辑 收藏

两个字符串的最大公共子串,是一个程序员们常常考到和想到的题目,听讲是当年微软面试时要求做的一个程序,写一个返回两个任意字串中最大公共串的函数,即abcdef 和 qcfbcc 返回值为bc
 

注:你要考虑到字符串中最大公共串相等的问题。
例如
dddabd123456abcdefeeeee
234dddabcdegeeee

 
输出:
dddab
abcde
#!/usr/bin/perl  
use strict;
use warnings;
use Data::Dumper;
my %hash1;
my %hash2;
my @arr;
my $str1 = 'aab12345678';
my $str2 = 'ab1234yb1234567';
$str1 =~ /(.*?)(?{$hash1{$1}=$1})(*F)/
    ;    #强制回朔,列举所有字符串,存入hash
$str2 =~ /(.*?)(?{$hash2{$1}=$1})(*F)/;

for ( keys %hash1 ) {
    my $k = $_;
    push @arr, $k if exists $hash2{$k};
}
my ( $max, $min ) = sort { length($b) cmp length($a) } @arr;
for (@arr) {
    if ( length($_) == length($max) ) {
        print "$_\n";
    }
}