要求:
给定一个字符串,求出其最长的重复子串,如字符串 abcdabcabcd,求得最长重复子串为 abcd 。
参考答案:
<?php
class longest_repeatable_substring
{
function __construct($str)
{
$str_len = strlen($str);
$maxlen = 0;
$maxi = 0;
$suffix_array = array();
for($i=0; $i<$str_len; $i++)
{
$suffix_array[] = substr($str, $i);
}
sort($suffix_array);
for($i=0; $i<$str_len-1; $i++)
{
$j = 0;
while(!empty($suffix_array[$i]{$j}) && ($suffix_array[$i]{$j} == $suffix_array[$i+1]{$j}))
{
$j++;
}
if($j > $maxlen)
{
$maxlen = $j;
$maxi = $i;
}
}
if($maxlen > 0)
{
echo iconv('utf-8', 'gbk', $str.'的最长的重复子串为: '.substr($suffix_array[$maxi], 0 ,$maxlen));
}
else
{
echo iconv('utf-8', 'gbk', '无最长的重复子串');
}
echo "\n";
}
}
function read()
{
$input = trim(fgets(STDIN));
return $input;
}
function test()
{
$str = 'abcdefhabcedfjjcdefhijk';
new longest_repeatable_substring($str);
}
function main()
{
echo iconv('utf-8', 'gbk', "请输入字符串\n");
$str = read();
new longest_repeatable_substring($str);
}
if(!empty($argv[1]) && $argv[1]=='test')
{
test();
}
else
{
main();
}
转载于:https://blog.51cto.com/hehe1987/1639737