php查找字符串中包含的所有对称字符串

发布时间:2020/05/18 编辑:天马行空 阅读(86)

第一种:

$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();


关键字php 算法