输出回文数
/**
* 输出回文数
* 【问题描述】一段字符串,输出字符串的回文数,最小判断数为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);
勿忘初心,方得始终。
愿茫茫人海,觅得贤妻,此生足矣!