牛客寒假算法基础集训营4 I Applese 的回文串

本文介绍了一种算法,用于判断在字符串任意位置插入一个字符后能否形成回文串。通过检查字符串长度、直接回文性和特定位置的字符匹配,提供了一种高效的解决方案。

【题目】

自从 Applese 学会了字符串之后,精通各种字符串算法,比如……判断一个字符串是不是回文串。

这样的题目未免让它觉得太无聊,于是它想到了一个新的问题。

如何判断一个字符串在任意位置(包括最前面和最后面)插入一个字符后能不能构成一个回文串?

【输入】

【输出】

【输入样例】

【输出样例】

【题解】

不难看出如果只有1个或者2个字母 就一定是YES 如果本身是回文的 那也一定是YES,如果前两个都不满足 那就从首尾开始依次判断,遇到不相同的位置s[i],s[j]时,判断下s[i]到s[j-1]或者s[i+1]到s[j]是否为回文即可。

#include<bits/stdc++.h>
using namespace std; 
string s;
int check(int l,int r)
{
    for(int i=l,j=r;i<=j;i++,j--)
       if(s[i]!=s[j]) return 0;
    return 1;
}
int main()
{
   cin>>s;
   int l=s.length(),f=0;
   int i=0,j=l-1;
   if(l<=2) f=1;
   else if(check(i,j)) f=1;
   else
   {
       for(;i<j;i++,j--)
          if(s[i]!=s[j])
          {
             if(check(i+1,j)||check(i,j-1)) f=1;
             break;
          }
   }
   if(f) puts("Yes");
   else puts("No");
   return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值