php 字符串最大長度,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

?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值