Longest Palindromic Substring

Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.

即给你一个字符串,让你求出该字符串的最长回文子串

dp无悬念

if s[i]==s[j]  f(i,j) = f(i+1,j-1)

else f(i,j) = false


一开始直接想到的是用二维string数组的dp,果然MLE

用二维bool的dp,还是MLE

考虑到所用到的数据只有二维数组中的上三角部分,所以可以再次节省空间

每次发现一个f(i,j)为true的时候,与当前所维护的最长回文字串作比较,如果比当前的长,则更新

class Solution {
public:
    string longestPalindrome(string s) {
        bool **f;
        if(s.length()==1)
            return s;
        if(s.length()==2)
            if(s[0]==s[1])
                return s;
        string maxi="";
        int n = s.length();
		f=new bool*[n];
        for(int i=0;i<n;i++){
			f[i] = new bool[n-i];
			f[i][0] = 1;
		}
		for(int i=0;i<n-1;i++){
		    f[i][1] = (s[i]==s[i+1]);
		    if(f[i][1]){
		        if(2>maxi.length())
		            maxi = s.substr(i,2);
		    }
		}
		for(int i=n-3;i>=0;i--){
		    for(int j = 2;j<(n-i);j++){
		        if(s[i]==s[i+j]){
		            f[i][j] = f[i+1][j-2]; 
		            if(f[i][j]){
		                if((j+1)>maxi.length())
		                    maxi = s.substr(i,j+1);
		            }
		        }else
		            f[i][j] = false;
		    }
		}
		return maxi;
    }
};



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值