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)
算出最长的元素即求出了最长回文串了。
<?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)
算出最长的元素即求出了最长回文串了。