输出回文数

/**
 * 输出回文数
 * 【问题描述】一段字符串,输出字符串的回文数,最小判断数为2.
 * 例如:$a = 'qweewq';
 * 输出:ee\weew\qweewq\
 * acbcb的回文的所有回文字符串:cbc,bcb。 
 * 动态规划算法: 
 * f(i,j) = a[i] + f(i+1,j-1) + a[j] .(a[i] == a[j])
 */
 
/**
 * 递归判断是否是回文数
 */
function checkRight($start, $end, array $data)
{
    if($start > $end) {
        return true;
    }

    if($data[$start] != $data[$end]) {
        return false;    
    }

    return checkRight($start+1, $end-1, $data);
}

function main($str)
{
    $str2 = $str; // 赋值
    $data = str_split($str); // 将字符串转为数组

    $lenth = count($data); // 判断数据长度
    $num = $number = 0; // 初始值
    $result = array();
    // 循环对比
    for($start = 0; $start < $lenth - 1; $start++)
    {
        for($end = $start+1; $end < $lenth; $end++)    
        {
            if(checkRight($start, $end, $data))
            {
                $newData = array_slice($data, $start, $end - $start + 1); // 从数组中取出对应的一段
                $value = implode('', $newData); // 将数组转成字符串
                $result['all'][] = array('start'=>$start, 'end'=>$end, 'value'=>$value);

                // 判断最大值
                $number = $end - $start; // 回文数长度差值
                if($number > $num){
                    $num = $number;
                    $result['max'] = (substr($str2, $start, $num+1));  
                }
            }           
        }       
    }
    return $result;
}

$result = main('1212asdffdsa1214121spanstylefontsize18pximporjavautilspan');
echo '<pre>';
print_r($result);

  

posted @ 2020-05-27 13:49  Towering~  阅读(263)  评论(0编辑  收藏  举报