示例1
输入
applese
输出
No
示例2
输入
java
输出
Yes
备注:
|s|≤105
链接:https://ac.nowcoder.com/acm/contest/330/I?&headNav=acm
来源:牛客网
题解:
其实题面理解起来挺简单的,就是按照操作进行模拟,插入一个可以看做与删除一个等价。
但是写完之后只能通过98%,wa的快哭了。
后来发现我的这种写法有些不足,多亏大佬帮我想出的样例。修改后才得以ac。
样例:
//babccba
//battaba
AC代码:
#include<bits/stdc++.h>
using namespace std;
char s[200000+10];
int main()
{
while(cin>>s)
{
int slen=strlen(s),k1=0,k2=0,can=0;
int i=0,j=slen-1;
while(i<j)
{
if(s[i]==s[j])
{
i++;
j--;
}
else if(s[i]==s[j-1]&&k1==0)
{
i++;
j-=2;
k1++;
}
else if(s[i+1]==s[j]&&k1==0)
{
i+=2;
j--;
k1++;
}
else
{
break;
}
}
if((k1==1&&j<=i)||(slen%2==0&&i==slen/2)||(i==j&&i==slen/2))
can=1;
i=0,j=slen-1;
while(i<j)
{
if(s[i]==s[j])
{
i++;
j--;
}
else if(s[i+1]==s[j]&&k2==0)
{
i+=2;
j--;
k2++;
}
else if(s[i]==s[j-1]&&k2==0)
{
i++;
j-=2;
k2++;
}
else
{
break;
}
}
if((k2==1&&j<=i)||(slen%2==0&&i==slen/2)||(i==j&&i==slen/2))
can=1;
if(can)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}
//babccba
//battaba