构建字符串 时间限制:C/C++ 2000MS,其他语言 4000MS 内存限制:C/C++ 512MB,其他语言 1024MB 描述
小W今天学习了什么是字符串, 他突发奇想有这么一个问题 , 他设定了一个字符串的产生过程, 首先这个字符串全部是由小写字母组成 , 一开始的时候字符串为空, 然后从字符a开始插入这个字符串s,只可以插在字符串的头或尾 , 而且是按字典顺序(a~z)一个字符一个字符的使用, 现在给你t个字符串, 让你判断这些字符串是不是按照这个规则生成的,对于每个字符串输出 YES 或 NO.
输入描述
第一行一个整数t,表示有t个字符串需要判断. (1<=t<=10^4) 接下来t行每行一个要判断的字符串s . (1<=s.size()<=26)
输出描述
t行, 对于每个字符串输出 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 提示
ihfcbadeg a ba cba cbad cbade fcbade fcbadeg hfcbadeg ihfcbadeg 依次插入的abcdefghi ,插入的位置在头或尾 合法 输出YES
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define qwq ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
const int N = -1;
string s;
signed main()
{
qwq;
int T;
cin >> T;
while (T --)
{
cin >> s;
int n = s.size(), pos1, pos2, sch = 1;
/*pos1 is left, pos2 is right, sch is 进度*/
pos1 = pos2 = s.find("a");
if (pos1 == -1)
cout << "NO" << endl;
else
{
int f = 1;
while (1)
{
if (sch >= n)
break;
char _sch = (sch + 'a');
if (_sch == s[pos1 - 1])
-- pos1;
else if (_sch == s[pos2 + 1])
++ pos2;
else
{
f = 0;
break;
}
++ sch;
}
if (n == 1 && s[0] == 'a')
cout << "YES" << endl;
else if (n == 1 && s[0] != 'a')
cout << "NO" << endl;
else if (!f)
cout << "NO" << endl;
else
cout << "YES" << endl;
}
}
return 0;
}
/*pbl nbr:*/