题目:给定一个字符串 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; //谁长取谁
}
};
本文介绍了一种使用C++实现的寻找字符串中最长回文子串的方法。通过遍历字符串,检查每个字符为中心的回文串,分别考虑奇数和偶数长度的回文情况,最终返回最长的回文子串。
830

被折叠的 条评论
为什么被折叠?



