题目描述
某种特殊的语言中的每一个词都满足以下规则
-
单个字符
A
合法的 -
如果合法的串𝑆S,之后是一个字符
N
,并且以一个合法的串𝑇T结尾,那么这是合法的 -
如果一个串以字符
B
开头,之后是一个合法的串,并且以字符S
结尾,那么这是合法的
输入格式
第一行输入一个正整数𝑛n,表示有𝑛(1≤𝑛≤100)n(1≤n≤100)个串需要判断
接下来一行一个长度不超过100100的且仅有大写字母构成的字符串
输出格式
对于每一个串,如果时合法的输出YES
,否则输出NO
输入样例
5
A
ANA
ANANA
BANANAS
BANANA
输出样例
YES
YES
YES
YES
NO
样例解释
A
满足第一条规则ANA
满足第二条规则ANANA
满足第二条规则,因为它是A
后跟N
和ANA
。BANANAS
满足第三条规则,因为它是B
后跟ANANA
后跟S
。
代码
#include<bits/stdc++.h>
using namespace std;
bool f(string s){
int len=s.size();
if(s=="A"){
return 1;
}
else if(s[0]=='B'&&s[len-1]=='S'&&f(s.substr(1,len-2))){
return 1;
}
for(int i=0;i<len;i++){
if(s[i]=='N'){
if(f(s.substr(0,i))&& f(s.substr(i+1,len-2))){
return 1;
}
}
}
return 0;
}
int main(){
int n;
cin>>n;
while(n--){
string s;
cin>>s;
if(f(s)==1) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}