leecode最长回文子串

16 篇文章 0 订阅

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 转行第三年零二十三天

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值