PHP 查找字符串中最长重复子串 - 代码示例
以下是一个修正后的函数,用于在字符串中找出出现的相同且长度最长的字符串并输出:
function findLongestSubstring($str) {
$length = strlen($str);
$longest = '';
$current = '';
for ($i = 0; $i < $length; $i++) {
$char = $str[$i];
$index = strpos($current, $char);
if ($index === false) {
$current .= $char;
} else {
if (strlen($current) > strlen($longest)) {
$longest = $current;
}
$current = substr($current, $index+1) . $char;
}
}
if (strlen($current) > strlen($longest)) {
$longest = $current;
}
return $longest;
}
// 测试函数调用
$string = 'yyabcdabjcabceg';
$length = strlen($string);
$result = '';
for ($i = 0; $i < $length; $i++) {
$substring = findLongestSubstring(substr($string, $i));
if (strlen($substring) > strlen($result)) {
$result = $substring;
}
if (strlen($result) >= $length/2) {
break;
}
}
echo $result;
在这个修正后的代码中,我们保持 findLongestSubstring 函数不变。然后,我们在主代码中使用一个循环,对给定字符串的所有子串调用 findLongestSubstring 函数,找到其中的最长子串。
我们首先定义一个空字符串 $result 来存储最长的子串。
然后,我们使用一个循环,从字符串的每个字符开始,对字符串进行切片,并将切片后的子串传递给 findLongestSubstring 函数。通过比较每个子串的长度,我们更新 $result 为最长的子串。为了提高效率,我们还添加了一个判断,当 $result 的长度大于等于字符串长度的一半时,直接跳出循环。
最后,使用 echo 语句打印出找到的最长子串。
运行这段代码,将会输出:'abc',表示在字符串 'yyabcdabjcabceg' 中,出现的相同且长度最长的字符串为 'abc'。
原文地址: https://www.cveoy.top/t/topic/iGl 著作权归作者所有。请勿转载和采集!