1.用PHP1求回文數;
~~~
<?php
function func($str)
{
// 初始化最大回文序列中間坐標
$maxxy = 0;
// 初始化最大回文長度
$maxLength = 0;
// 初始化一個空數組存儲每次的回文序列中間坐標(key)和回文長度(value)
$arr = [];
// 通過在每個字符的兩邊都插入一個特殊的符號,將所有的回文子串都轉換成奇數長度;
// 在字符串的開始和結尾加入另一個特殊字符,這樣就不用特殊處理越界問題
$newStr = "^#" . implode("#", str_split($str)) . "#\0";
// 遞推,每次取一個數作為中間坐標
for ($i = 2; $newStr[$i] != "\0"; $i++) {
// 每個中間坐標的初始回文長度為1
$arr[$i] = 1;
// 根據每個中間坐標往兩頭匹配是否相等
while ($newStr[$i - $arr[$i]] == $newStr[$i + $arr[$i]]) {
// 每匹配成功一次,則當前坐標的最大回文長度加一
$arr[$i]++;
}
// 判斷當前回文長度是否大于最大的回文長度,大于則進去if代碼塊更新最大回文次數和更新最大回文中間坐標
if ($arr[$i] > $maxLength) {
$maxLength = $arr[$i];
$maxxy = $i;
}
}
// 截取最大回文長度的字符串
$res = substr($newStr, $maxxy - $maxLength + 1, $maxLength * 2 - 1);
// 清除開始加入的字符并返回
return str_replace('#', "", $res);
}
$str = "abcddcbwewqwqer";
echo func($str);
// 輸出 :bcddcb
?>
~~~
作者:煙雨彌漫了江南
鏈接:https://www.jianshu.com/p/9e52d42a47f5
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。