1.Longest Palindronmic Substring
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.
Input: "cbbd"
Output: "bb"
Difficulty:Medium
Explanation:
本题的解法主要是要实现两个核心的算法,一是如何找到是回文字符串的子字符串,二是如何找到最长的回文子字符串。
1、找到回文子字符串。回文字符串之所以叫回文字符串,正是因为这种类型的字符串正着看和反着看都是一样的。换句话来说,这种字符串是关于某个中心的对称的。因此我们只要找到这个中心,然后从这个中心向左右两边延伸,直到两边的字符不相等为止,这样便得到了一个回文子字符串。与此同时,这个中心点可能是某个字符(回文子字符串长度为奇数),也可能是两个字符之间(回文子字符串为偶数)。
2、找到最长回文子字符串。这个问题的解法相对比较简单,可以利用一个数值记录最大回文子字符串的长度,然后每找到一个新的回文子字符串就与这个数值进行比较,更新这个值并记录新的最大回文子字符串的起始坐标。
code:
class Solution {
public:
string longestPalindrome(string s) {
int MaxLength = 0;
int MaxStart;
int MaxEnd;
for (int i = 0; i < s.size()*2 - 1; i++)
{
int Left = i/2;
int Right = i % 2 == 0 ? Left:Left+1;
while (Left >= 0 && Right <= s.size() && s[Left] == s[Right])
{
Left--;
Right++;
}
int SubStrLen = Right - Left - 1;
if (SubStrLen > MaxLength)
{
MaxLength = SubStrLen;
MaxStart = Left+1;
MaxEnd = Right - 1;
}
}
return s.substr(MaxStart, MaxLength);
}
};