php求最长回文串

php求最长回文串,源码如下:
<?php
$str = "abcba123321qw";
$len = strlen($str);
$max = 0;
$tmp = array();
for($i=0; $i<$len; $i++)
{
//直接对称的情况
for($j=0; $i-$j>=0&&$i+$j<$len; $j++)
{
if($str[$i-$j] != $str[$i+$j]) break;
if($j*2+1 > $max)
{
$max = $j*2+1;
$tmp[] = substr($str,$i-$j,2*$j+1);
}
}




//相对于某个值对称的情况
for($j=0; $i-$j>=0&&$i+$j+1<$len; $j++)
{
if($str[$i-$j] != $str[$i+$j+1]) break;
if($j*2+2 > $max)
{
$max = $j*2+2;
$tmp[] = substr($str,$i-$j,$j*2+2);
}
}
}
var_dump($tmp);
/*
1.adfda   ad和da相对于f对称
2.asddsa  asd和dsa直接对称
*/
?>
执行结果:
array (size=4)
  0 => string 'a' (length=1)
  1 => string 'bcb' (length=3)
  2 => string 'abcba' (length=5)
  3 => string '123321' (length=6)
算出最长的元素即求出了最长回文串了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值