Codeforces Round #731 (Div. 3) B. Alphabetical Strings
Posted yueshehanjiang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #731 (Div. 3) B. Alphabetical Strings相关的知识,希望对你有一定的参考价值。
B. Alphabetical Strings
题意:
你一开始有一个空的字符串 s = ""
从‘a'到‘z'这26个字母按照顺序
你每次可以 s = s + 这个字母
或者是 s = 这个字母 + s
现在给你q个询问
(q <= 1e4)
每个询问给你一个字符串
(strlen <= 26)
问这个字符串是否可以是s的其中一个子串
思路:
s必定是从字母a开始相加
所以先找到字母a的下标
然后定义2个指针l,r
依次向左和向右走
如果这2个指针可以走到头
说明是s的子串
时间复杂度:O n
#include<bits/stdc++.h>
#define fer(i,a,b) for(re i = a ; i <= b ; ++ i)
#define re register int
#define pll pair<int,int>
#define x first
#define y second
#define sf(x) scanf("%d",&x)
#define sfl(x) scanf("%lld",&x)
typedef long long ll ;
using namespace std;
const int N = 1e6 + 10 , M = 1010 , inf = 0x3f3f3f3f , mod = 1e9 + 7 ;
char a[N] ;
int main()
{
int t ;
cin >> t ;
while(t--)
{
cin >> a + 1 ;
int n = strlen(a + 1) ;
a[n + 1] = '.' ; // 让a[n+1]等于一个不存在的字符
// 所以最后不会对r这个指针产生影响
int xia = 0 ;
fer(i,1,n)
{
if(a[i] == 'a')
{
xia = i ;
break ;
}
}
if(!xia) puts("NO");
else
{
int l = xia - 1 , r = xia + 1 ;
char k = 'b' ;
while(true)
{
if(a[l] == k)
{
l -- ;
k ++ ;
}
else if(a[r] == k)
{
r ++ ;
k ++ ;
}
else break ;
}
if(l == 0 && r == n + 1) puts("YES");
else puts("NO") ;
}
}
return 0;
}
以上是关于Codeforces Round #731 (Div. 3) B. Alphabetical Strings的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #731 (Div. 3)
Codeforces Round #731 (Div. 3) E题解
Codeforces Round #731 (Div. 3) B. Alphabetical Strings
Codeforces Round #731 (Div. 3) E. Air Conditioners
Codeforces Round #731 (Div. 3) F. Array Stabilization (GCD version)
Codeforces Round #731 (Div. 3) F. Array Stabilization (GCD version)