题解 | #最长回文子串#

最长回文子串

http://www.nowcoder.com/practice/b4525d1d84934cf280439aeecc36f4af

动态规划:dp[i][j] 表示字符串第i个字符到第j个字符长度的子串,是否是回文(1 or 0)
如果A[i]==A[j]  and dp[i+1][j-1]==1  则 dp[i][j]=1
否则dp[i][j]=0

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param A string字符串 
     * @return int整型
     */
    int getLongestPalindrome(string A) {
        // write code here
        int dp[1001][1001]={0};
        int lens=A.size();
        int max_len=1;
        for(int i=0;i<lens-1;i++)
        {
            dp[i][i]=1;
            if(A[i]==A[i+1])
            {
                dp[i][i+1]=1;
                max_len=2;
            }
        }
        dp[lens-1][lens-1]=1;
        
        for(int ll=2;ll<lens;ll++)
        {
            for(int j=0;j<lens-ll;j++)
            {
                if(A[j]==A[j+ll]&&dp[j+1][j+ll-1]==1)
                {
                    dp[j][j+ll]=1;
                    max_len=max(max_len,ll+1);
                }else{
                    dp[j][j+ll]=0;
                }
            }
        }
        return max_len;
    }
};
全部评论

相关推荐

不愿透露姓名的神秘牛友
06-25 19:15
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务