首页 > 其他分享 >CF1825A

CF1825A

时间:2023-09-18 14:44:09浏览次数:47  
标签:子串 输出 CF1825A int ans 回文

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

相关文章