lintcode最长回文子串

最长回文子串 

给出一个字符串(假设长度最长为1000),求出它的最长回文子串,你可以假定只有一个满足条件的最长回文串。

样例

给出字符串 "abcdzdcab",它的最长回文子串为 "cdzdc"

分析:首先了解一下回文子串就是正着反着都一样的字符串,例如waw,woow,woooow等。解这道题的思路就是用一个二维数组记录这两个数组下标内的字符串是不是回文子串,所以这是动态规划的思想。定义两个变量i,j。i用来表示字符串最右端下标,j用来表示字符串最左端下标。i==j时,就是一个字符肯定是回文子串;i-j==1时,是相邻的两个子串,相等也是回文子串;i-j>=2时,就是中间最少隔一个字符的子串了,这时就可以判断左右两端字符是否相等再判断中间隔得字符是不是回文子串。下面是代码
class Solution {
public:
    /*
     * @param s: input string
     * @return: the longest palindromic substring
     */
    string longestPalindrome(string &s) {
        // write your code here
       int dp[s.size()][s.size()]={0},left=0,right=0,len=0;
       for(int i=0;i<s.size();i++)//i从下标0开始
       {
           for(int j=0;j<=i;j++)//j最大可以等于j,相当于单个字母
           {
               dp[j][i]=(s[j]==s[i])&&((i-j<2)||(dp[j+1][i-1]));//动态规划,这里下标可能会小于0,可能有隐患
               if(dp[j][i]&&(i-j+1>len))//这里和目前最大长度比较
               {
                   len=i-j+1;
                   left=j;
                   right=i;
               }
           }
       }
       return s.substr(left,len);
    }
};

最长回文子串 

Accepted

太牛了,把AC的喜悦分享给你的朋友吧!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值