题目:给定一个字符串 s
,找到 s
中最长的回文子串。你可以假设 s
的最大长度为 1000。
c++解答代码:
class Solution {
public:
string longestPalindrome(string s) {
string hw1, hw2;
int nSize = s.length();
int nMax1 = 0, nMax2 = 0;
for (int i = 0; i < nSize; ++i) //检验是否左右两侧的值一致
{
//第一种情况,自身只有一个,但两侧全是回文
int j = 0;
while (i - j >= 0 && i + j < nSize)
{
if (s.at(i - j) == s.at(i + j))
{
if (nMax1 <= j)
{
nMax1 = j;
hw1 = s.substr(i - j, 2 * j + 1);
}
}
else
break;
j++;
}
//第二种情况,自身参与回文,两侧也是回文
j = 0;
while (i - j >= 0 && i + j + 1 < nSize)
{
if (s.at(i - j) == s.at(i + j + 1))
{
if (nMax2 <= j)
{
nMax2 = j;
hw2 = s.substr(i - j, 2 * j + 2);
}
}
else
break;
j++;
}
}
return hw1.length() > hw2.length() ? hw1 : hw2; //谁长取谁
}
};