描述
给定一个长度为n的字符串,如果满足以下的构造方法,则输出YES,否则输出NO。
①:首先字符串s为空,即s = "";
②:在第i步,取在字母表中第 i 小的小写字母,记为c,将其添加到s的首部或者尾部,即s = s + c或者s = c + s
③:重复进行第2步
输入
第一行包含一个整数t(1≤t≤104)-测试用例的数量。然后是测试用例。
每个测试用例都写在包含一个字符串s的单独的行上。字符串s由拉丁字母的小写字母组成,长度在1到26之间(含26)。
输出
输出t行,每一行都必须包含对应测试用例的答案。如果给定字符串s是符合构造方法的,则输出YES,否则输出NO。
输入样例 1
11
a
ba
ab
bac
ihfcbadeg
z
aa
ca
acb
xyz
ddcba
输出样例 1
YES
YES
YES
YES
YES
NO
NO
NO
NO
NO
NO
思路 根据规律可得 1.出现的字符应该小于‘a’+字符串长度-1 2.出现的字符不能有重复 3.当字符串长度大于2时,除去两端的字母,其他字母不能同时大于其两端字母。
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{int t;
cin>>t;
while(t--)
{
string a;
cin>>a;
int k=0;
int m=a.size();
for(int i=0;i<m;i++)
{
for(int j=0;j<m;j++)
{
if(j!=i)
{
if(a[i]==a[j])
k=1;
}
}
}
for(int i=1;i<m-1;i++)
{
if(a[i]>a[i+1]&&a[i]>a[i-1])
k=1;
}
for(int i=0;i<m;i++)
{
if(a[i]>='a'+m)
k=1;
}
if(k==1)
cout<<"NO"<<endl;
if(k==0)
cout<<"YES"<<endl;
}
return 0;
}
|