这周依然是动态规划的题目。
先贴原题:
Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
Example:
Input: "babad" Output: "bab" Note: "aba" is also a valid answer.
Example:
Input: "cbbd" Output: "bb"
由题目可知:因为找的是成对称排列的字符子串。所以可以由中间向两边查找,例如bab,可以从a的两边查找,如果左右两边的元素值一样,那么两边的数向两边移动。但是由于可能会有一样的字符,所以第一步可以先把一样的连续字符拼成一个串,然后再从这个串往两边找。
贴出代码:
#include <iostream>
#include <string>
using namespace std;
class Solution {
public:
string longestPalindrome(string s) {
string lps = "";
int maxL = 0;
for (int i = 0; i < s.length(); i++) {
int left = i, right = i;
while (i + 1 < s.length() && s[i] == s[i + 1]) {
right = i + 1;
i++;
}
while (left >= 0 && right<s.length() && s[left] == s[right]) {
left--; right++;
}
if (right - left - 1 > maxL) {
lps = s.substr(left + 1, right - left - 1);
maxL = right - left - 1;
}
}
return lps;
}
};
可知时间复杂度为:O(n*n);
空间复杂度为O(1);