感觉思路没问题。
当末尾是 l,b,q 时,肯定可以,毕竟你可以在开头补上去,如果不是,那就从开头开始匹配,如果匹配到了且两个字符的位置互异,就可行,否则返回 0。特别的处理长度为 1 的情况。
#include<bits/stdc++.h>
using namespace std;
bool check(string x){
while(!x.empty()){
int now=x.size()-1;
int pd=1;
if(x.size()==1)
{x.erase(x.begin()+now);continue;}
for(int i=0;i<now;i++){
if(x[i]==x[now]){
pd=0;
x.erase(x.begin()+now);
x.erase(x.begin()+i);
break;
}
}
if(pd){
if(x[now]=='l'||x[now]=='q'||x[now]=='b') x.erase(x.begin()+now);
else return 0;
}
}
return 1;
}
int main(){
int t;
cin>>t;
while(t--){
string s;
cin>>s;
if(check(s)) cout<<"Yes\n";
else cout<<"No\n";
}
return 0;
}