删除两个相邻的字母
给定一个字符串 ss ,长度为奇数,由小写字母构成。
只要字符串长度大于1,可以对其进行如下操作:选择字符串中任意两个相邻的字母,并从字符串中删除它们。
例如,在字符串 lemma
的一次操作中,你可以能会获得以下四个字符串中的任何一个: mma
、lma
、 lea
或 lem
。
特别地,在一次操作中,字符串的长度会减少 2
对于给定的 s 和字符 c,是否存在一个操作序列可以让 s 在经过若干次操作过后,只剩下的字符为 c?
如果可以,输出 YES
,否则输出 NO
。
做题时先把可能的情况列一下
之前写的代码有些麻烦了,回看的时候发现了更加简单的写法
我们根据题意要删除的是相邻的两个字符,并且题目字符长度给的是奇数,就会有两种情况删除前两个或者删除后两个,模拟一下结果和字符所在的位置有关。如果只剩下一个字符那么他前面的字符个数必为偶数个,由于我选择从0开始存储那么他的位置就为偶数,还有一种情况是只有一个字母,那么我们把原来的位置数加一就可以。
还有就是比如这种tuutm u这种一个字符串出现了多次,那么我们可以开一个循环进行特判,不满足要求的话从下一位开始再次寻找,如果不满足要求且找不到的话就直接break。
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
while(n--)
{
string s1;
cin>>s1;
char c;
cin>>c;
int ans=s1.find(c)+1;
while(1)
{
if(ans%2)
{
cout<<"Yes"<<endl;
break;
}else
{
ans=s1.find(c,ans)+1;
if(ans==0)
{
cout<<"No"<<endl;
break;
}
}
}
}
return 0;
}