L2-008 最长对称子串 (25 分)
处理方式: 把字符串用#分割开
比如输入一串字符:Is PAT&TAP symmetric?
然后根据下标。不断扩大搜索范围,从间隔1个到间隔n个。一遍循环后,能找出最大的那个子序列,每循环一次,则找到和之前最大的比较,留一个最大值下来。
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s;
getline(cin, s);
string cnt = "#";
int len = s.size();//不包括最后的\0
for (int i = 0; i < len; i++) cnt += s[i], cnt += '#';
len = cnt.size();
int ans = 1;
for (int i = 0; i < len; i++)
{
int tmp = 0;
if (cnt[i] != '#') tmp++;
for (int j = i - 1, l = i + 1; j >= 0 && l < len; j--, l++)
if (cnt[j] == cnt[l])
{
if (cnt[j] != '#') tmp += 2;
}
else break;
ans = max(ans, tmp);
}
cout << ans;
}