leecode最长回文子串
解题思路
基本上都会想到中心扩散,但是这个中心扩散有个奇数偶数的问题,所以优化了下,借用了部分马拉车算法的思想 解决问题,内存消耗还可以优化。初版解决问题为先。
代码如下
<?php
class Solution {
private $high = 0;
private $str_end = '';
public function longestPalindrome($str)
{
$count = strlen($str);
$tmp = '#';
for($i=0;$i<$count ;$i++){
$tmp .= $str[$i] . '#';
}
$str = $tmp;
echo $str;
for($i=0;$i<strlen($str);$i++){
$this->judge($str, $i);
}
return $this->format();
}
public function format()
{
$new_str='';
for($i=0;$i<strlen($this->str_end);$i++){
if($this->str_end[$i] !='#'){
$new_str .= $this->str_end[$i];
}
}
return $new_str;
}
public function judge($str, $k){
if($k == 0 || strlen($str) == $k){
return;
}
$i = $j = $k;
$i--;
$j++;
$tmp = $str[$k];
while($str[$i] == $str[$j]){
$ltmp = $str[$i];
$rtmp = $str[$j];
if($i>0){
$i--;
}else{
break;
}
if($j<strlen($str)){
$j++;
}else{
break;
}
$tmp = $ltmp . $tmp . $rtmp;
}
if(strlen($tmp) > $this->high ) {
$this->high = strlen($tmp);
$this->str_end = $tmp;
}
}
}
2019-11-12 转行第三年零二十三天