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