ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
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 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。