要求:
给定一个字符串,求出其最长的重复子串,如字符串 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(); }