#!/usr/bin/perl
use strict;
use warnings;
my $s1 = 'asdfdfdfdfdfdfdfdfdfasf34lk343434343433333fdasfd';
my $s2 = 'asdfdfdfdfdfdfdfdfdf3434343434343jfshasdazlzlasbfasfdllzlz';
my $max = &Analysis($s1,$s2,20);
print "$max\n";
#-------------------------------------------------------------------------------------------------------------------
#前2个参数为2个字符串,分析第一个字符串在
#第二个字符串中最大相同的串
#第三个参数为字符串最小长度,如果没有定义最小
#长度,则默认最小长度为:2
sub Analysis ($$;$)
{
my ($s1,$s2,$min) = @_;
$min = 2 if (!defined $min) ;
my $ss = &getsub($s1,$min);
@$ss = sort {length($b) <=> length($a)} @$ss;
foreach my $s (@$ss) {
if ($s2 =~/$s/)
{
return $s;
last;
}
}
return 'False';
}
sub getsub ($;$)
{
my ($str,$min) = @_;
my $len = length($str);
my @subs;
for (my $i = 0;$i <= $len - $min ;$i++)
{
for (my $j = $min ; $j + $i <= $len ; $j++)
{
push @subs,substr($str,$i,$j);
}
}
return \@subs;
}
|