牛客寒假算法基础集训营4_I-Applese 的回文串(回文)

题目链接:https://ac.nowcoder.com/acm/contest/330/I

题目描述

自从 Applese 学会了字符串之后,精通各种字符串算法,比如……判断一个字符串是不是回文串。
这样的题目未免让它觉得太无聊,于是它想到了一个新的问题。
如何判断一个字符串在任意位置(包括最前面和最后面)插入一个字符后能不能构成一个回文串?

思路:其实判断插入一个字符后能不能构成回文和删除一个字符是一样的,因为插入一个新的字符就相当于删除与之对应的那个字符。如果本身就是回文串的话,插入一个新的字符有办法构成回文串(在中间插,如abccba->abcdcba,aba->abba)。如果本身不是回文串,先找到左右不同的那两个字符,分别去掉后再比较。

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+7;
char a[maxn];
int main(){
	cin>>a;
	int n=strlen(a),flag1=0,flag2=0,flag3=0;
	for(int i=0;i<n/2;i++)
	{
		if(a[i]!=a[n-1-i]) flag1=1;//本身不是回文串
		if(flag1)
		{
			if(a[i+1]!=a[n-1-i]) flag2=1;//去掉左边不同的字符后仍然不是回文
			if(a[i]!=a[n-2-i]) flag3=1;//去掉右边不同的字符后仍然不是回文
		}
	}
	if(flag2&&flag3) puts("No");
	else puts("Yes");
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我爱吃狮子头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值