- 论坛徽章:
- 0
|
我开始也是有这个疑惑,若有多个公共子串,应该如何计算。我在wxlfh代码基础上改了一下,能获得长度大于2的公共子串:- #!/usr/bin/perl
- sub max_mutual_str {
- my($min,$max) = @_;
- if (length($min)>length($max)) {
- ($min,$max) = ($max,$min);
- }
- my $len = length($min);
- my $result;
- my $pos = 0;
- while ($pos < $len-1) {
- my $rest = $len-$pos;
- my $check = 0;
- while ($rest > 1) {
- my $str = substr($min,$pos,$rest);
- print "$pos $rest $str\n";
- if ($max =~ /$str/) {
- $result .= " $str";
- my $skip = length($str);
- $pos += $skip;
- $rest -= $skip;
- $check = 1;
- }
- else { $rest--; }
- select(undef,undef,undef,0.05);
- }
- $pos++ if (!$check);
- }
- if ($result) { return($result); }
- else { return("Mutual String Not Found!"); }
- }
- my $str1 = '123456abcdefeeeee';
- my $str2 = '234dddabcdegeeee';
- $str = max_mutual_str($str1,$str2);
- print "$str\n";
复制代码 输出:234 abcde eeee
我加了显示计算过程的代码。以上代码可能不够简洁,等高手指点。 |
|