Leetcode 5. Longest Palindromic Substring (straight forward DP)

为什么直接到第五题呢- -  因为第四题好难,我得消化一下

Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.

Example 1:

Input: "babad"
Output: "bab"
Note: "aba" is also a valid answer.

Example 2:

Input: "cbbd"
Output: "bb"
我觉得这道题不难,看到题目觉得可以用类似滑动窗口去做,从中间往外扩,左边增加一个,右边增加一个;
虽然思路是对的,但是卡在了这种 "ccb"这种偶数的例子中,还是觉得自己没有考虑的清楚,实现起来会有问题,我觉得一个完全争取的DP真的是不容易的,因为它还要考虑到 2个letter,然后往后以此类推 3个letter,4个letter,……, n个letter;


AC 代码:

string longestPalindrome(string s) {
        int j = s.length(), ans = 0;
        int dp[j][j];
        int beginofS, endofS;  beginofS = endofS = 0;
        /* dp初始化 */
        for(int m = 0; m < s.length(); m++)
            for(int n = 0; n < s.length(); n++)
                dp[m][n] = 0;
        
        /* one letter */
        for(int m = 0; m < s.length(); m++)
            dp[m][m] = 1;
        
        /* two letter */
        for(int m = 1; m < s.length(); m++){
            if(s[m - 1] == s[m]){
                beginofS = m-1;
                ans = 2;
                dp[m-1][m] = 1;
            }
        }
        /* from 3 letters to n letters */
        for(int len = 3; len <= s.length(); len++){
            for(int i = 0; i < s.length(); i++){
                int j = i + len -1;
                if(j < s.length() && s[i] == s[j] && dp[i+1][j-1]){
                    ans = len;
                    beginofS = i;
                    dp[i][j] = 1;
                }
            }
        }
        return  s.substr(beginofS, ans);
    }

猜你喜欢

转载自blog.csdn.net/qq_25175067/article/details/80384995