思路和003很相似,003是找最长的不重复序列,并返回长度;
对于外循环的每一个i,判断它后面的每一个j,是否能使得s【i】到s【j】构成回文序列;
如果构成了回文序列,count保存此时的回文序列长度,out保存的是程序到现在为止、已经得到的最大长度;
如果count>out了,out=count,并让res保存现在这个更长一点的回文字符串;
当然也可能根本就没有回文串,最后判断一下即可;
需要注意的是,如果j到了某一位置,s【i】到s【j】不构成回文序列,此时j仍要++,继续判断,比如“aba”;
代码:
class Solution {
public:
static string longestPalindrome(string s) {
int out = 0, i = 0, j, count = 0, m,n;
string res;
if (!s.size()) return res;
for (i = 0; i < s.size() - 1; i++)
{
count = 1;
j = i + 1;
while (j < s.size())
{
m = i,n=j;
while (m<=n)
{
if (s[m] == s[n]) m++,n--;
else break;
}
if (m > n)
{
count = j - i + 1;
if (count > out)
{
out = count;
m = i, n = j;
res.clear();
for (m; m <= n; m++)
res += s[m];
}
}
j++;
}
}
if (!out) res +=s[0];
return res;
}
};