CF1825A
题目
给你一个回文字符串,找出里边长度最大的非回文字符串子串并输出长度,如果没有则输出 \(-1\)
输入
t \((1 \le t \le 50)\) 个测试样例,每个样例长度 \(\le 1000\)
输出
每行输出最长非回文字符串子串长度,如果没有就输出 \(-1\)
分析
观察得出如果有答案,那么最长子串一定是以 \(s[0]\) 开头的,所以我们只需要从后往前遍历子串结尾,判断是否是回文串即可
注意 :千万不可以凭借开头和结尾不同去找子串,虽然这样一定是非回文串,但不能保证最长,比如 aabbaa
这个样例,如果按开头结尾不同去找,输出答案是 \(4\) ,即 aabb
,但是正确答案是 \(5\) ,即 aabba
代码
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
bool check(char p[], int end)
{
int l = 0, r = end;
while (l < r)
{
if (p[l] != p[r])
return false;
l++, r--;
}
return true;
}
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
char s[50];
scanf("%s", s);
int ans = -1;
for(int j = strlen(s) - 1; j > 0; j --)
{
if (!check(s, j))
{
ans = j + 1;
break;
}
}
printf("%d\n", ans);
}
}
标签:子串,输出,CF1825A,int,ans,回文
From: https://www.cnblogs.com/beishangeyu/p/17711825.html