发布时间:2020/05/18 作者:天马行空 阅读(1135)
第一种:
$str = 'sdjfhiuiyxhzzzzzulnjxzbbzxcsaaskanxksmsbbsmmsbbsmsgahkgjssdjfhiuiyxhzzzzzulnjxzbbzxcsaaskanxksmsbbsmmsbbsmgahkgjs';
preg_match_all('/(.)\1+/', $str, $matchs);
$len_s = array();
foreach ($matchs[0] as $ckv) {
$len = strlen($ckv);
if ($len % 2 == 0) {
$str_a = explode($ckv, $str);
checkLen($ckv, $str_a, $len_s);
} else {
$len_s[substr($ckv, 0, ($len - 1))] = $len - 1;
}
}
function checkLen($ckv, $str_a, &$len_s)
{
foreach ($str_a as $k => $v) {
if (isset($str_a[$k + 1])) {
$str1 = $str_a[$k];
$str2 = $str_a[$k + 1];
$str_len1 = strlen($str1);
$str_len2 = strlen($str2);
$count = min(array(
$str_len1,
$str_len2
));
$rckv = '';
for ($i = 0; $i < $count; $i ++) {
$sub1 = substr($str1, $str_len1 - $i, $i);
$sub2 = substr($str2, 0, $i);
if ($sub1 == strrev($sub2)) {
$rckv = $sub1 . $ckv . $sub2;
} else {
break;
}
}
$len_s[$rckv] = isset($len_s[$rckv]) && $len_s[$rckv] > strlen($rckv) ? $len_s[$rckv] : strlen($rckv);
}
}
}
第二种:
function str(){
$str = 'kgfafbmrwrwrmbfdaa';
if($str===strrev($str) && strlen($str)%2==0){
echo $str;exit;
}
for($len = strlen($str)-1;$len>1;$len--) {//从最长的找
if($len%2>0){//奇数长度的直接跳过
continue;
}
for($i=0;$i<=strlen($str)-$len;$i++){//从第一位开始去取第一个for循环的长度
$str_1 = substr($str, $i, $len);
if ($str_1 === strrev($str_1) && strlen($str_1) % 2 == 0) {//取出来的字符串刚好是对称的直接中断查找
echo $i.' ooo '.$len.' '.$str_1;
exit;
}
}
}
}
str();