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);}
}