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”
翻译
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。
示例 1:
输入: “babad”
输出: “bab”
注意: "aba"也是一个有效答案。
示例 2:
输入: “cbbd”
输出: “bb”
分析
对每一个字符和每两个字符中间的间隔作为对称轴向两边延展,找到最长回文子串。复杂度为O(n^2)。有O(n)的算法,暂时没看明白。
c++实现
class Solution {
public:
string expend(string s,int left,int right) {
while (left >= 0 && right < s.length())
{
if (s[left] == s[right])
{
left--;
right++;
}
else
break;
}
return s.substr(left+1,right-left-1);
}
string longestPalindrome(string s) {
string R = "";
for (int i = 0; i < s.length()-1; i++)
{
string p1 = expend(s,i,i);
if (p1.length() > R.length())
R = p1;
string p2 = expend(s,i,i+1);
if (p2.length() > R.length())
R = p2;
}
if (R.length() < 1)
return s.substr(s.length()-1,1);
return R;
}
};