为什么直接到第五题呢- - 因为第四题好难,我得消化一下
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); }