题目:
分析:
这道题借鉴了这位大佬的题解,通过题目可知找对称字符串,对称的字符串又满足回文串的性质,也就是说该字符串倒转之后仍为他本身,可以通过一个二重循环,倒转每一个可能的字符串,看该字符串是否满足回文串的性质,如果满足,找出这些字符串中最长的即可。
代码:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
int main()
{
string ss;
int ans = 1;
getline(cin,ss);
int len = ss.size();
for(int i=0;i<len;++i)
{
string mat = "";
for(int j=i;j<len;++j)
{
mat += ss[j];
string tmp = mat;
reverse(tmp.begin(),tmp.end());
if(tmp == mat && ans < tmp.size())
ans = tmp.size();
}
}
printf("%d\n",ans);
return 0;
}
暴力求解法:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main()
{
string ss;
int ans,maxx = 1;
getline(cin,ss);
int len = ss.size();
for(int i=0;i<len;++i) //对称串长度为偶数
{
ans = 0;
int left = i;
int right = i+1;
while(left>=0&&right<len&&ss[left]==ss[right])
{
left--;
right++;
ans += 2;
}
if(ans > maxx)
maxx = ans;
}
for(int i=1;i<len;++i) //对称串长度为奇数
{
ans = 1;
int left = i-1;
int right = i+1;
while(left>=0&&right<len&&ss[left]==ss[right])
{
left--;
right++;
ans += 2;
}
if(maxx < ans)
maxx = ans;
}
printf("%d\n",maxx);
return 0;
}