CF1547B Alphabetical Strings(了解字符串的的一些规律)

简介: CF1547B Alphabetical Strings(了解字符串的的一些规律)

Alphabetical Strings



time limit per test2 seconds

memory limit per test512 megabytes

inputstandard input

outputstandard output


A string s of length n (1≤n≤26) is called alphabetical if it can be obtained using the following algorithm:


first, write an empty string to s (i.e. perform the assignment s := “”);

then perform the next step n times;


at the i-th step take i-th lowercase letter of the Latin alphabet and write it either to the left of the string s or to the right of the string s (i.e. perform the assignment s := c+s or s := s+c, where c is the i-th letter of the Latin alphabet).


In other words, iterate over the n first letters of the Latin alphabet starting from ‘a’ and etc. Each time we prepend a letter to the left of the string s or append a letter to the right of the string s. Strings that can be obtained in that way are alphabetical.


For example, the following strings are alphabetical: “a”, “ba”, “ab”, “bac” and “ihfcbadeg”. The following strings are not alphabetical: “z”, “aa”, “ca”, “acb”, “xyz” and “ddcba”.


From the given string, determine if it is alphabetical.


Input

The first line contains one integer t (1≤t≤10^4) — the number of test cases. Then t test cases follow.


Each test case is written on a separate line that contains one string s. String s consists of lowercase letters of the Latin alphabet and has a length between 1 and 26, inclusive.


Output

Output t lines, each of them must contain the answer to the corresponding test case. Output YES if the given string s is alphabetical and NO otherwise.


You can output YES and NO in any case (for example, strings yEs, yes, Yes and YES will be recognized as a positive answer).


Example


inputCopy

11

a

ba

ab

bac


ihfcbadeg

z

aa

ca

acb

xyz

ddcba


outputCopy

YES

YES

YES

YES

YES

NO

NO

NO

NO

NO

NO


Note

The example contains test cases from the main part of the condition.


题意分析


生成一个字符串(字符都是小写字母)。生成规则如下:


·初始字符串是空的。


·每次在前面或后面加入一个字符,第 ii 次加入的字符是小写字母表中第 ii 个小写字母。


给一些字符串,请判断是否可以被生成出来。


做法



显然若字符串中字符的出现并不连续或者同一个字符出现了两次,那么该串是不行的。


举个栗子:dba,bab。


然后我们看:每次字母从小到大加,且加在两侧,那是不是中间的字符会比旁边的小呢?


有了这些结论,这题就做完了,上代码。

#include<bits/stdc++.h>
using namespace std;
int main()
{
  int t;
  cin>>t;
  while(t--)
  {
    string s;
    cin>>s;
    int l=0;
    int r=s.size()-1;
    while(l<=r)
    {
      if((s[l]-'a')==r-l)
      l++;
      else if((s[r]-'a')==r-l)
      r--;
      else break; 
    }
    if(l>r)
    cout<<"YES"<<endl;
    else
    cout<<"NO"<<endl; 
  }
 } 


相关文章
|
6月前
|
机器学习/深度学习 缓存 安全
Python标准库中的`str`类型有一个`translate()`方法,它用于替换字符串中的字符或字符子集。这通常与`str.maketrans()`方法一起使用,后者创建一个映射表,用于定义哪些字符应该被替换。
Python标准库中的`str`类型有一个`translate()`方法,它用于替换字符串中的字符或字符子集。这通常与`str.maketrans()`方法一起使用,后者创建一个映射表,用于定义哪些字符应该被替换。
Indexof是从前向后查找位置,lastIndexOf是从后往前查找:输出他们的位str.Indexof是编号,str.includes(‘1‘)是布尔,startsWidth()是开头,返回是布尔
Indexof是从前向后查找位置,lastIndexOf是从后往前查找:输出他们的位str.Indexof是编号,str.includes(‘1‘)是布尔,startsWidth()是开头,返回是布尔
|
7月前
|
C++
【洛谷 B2025】输出字符菱形 题解(raw string literal)
使用`*`构建一个斜置的、对角线长度为5的菱形。无输入要求。输出示例:`*`、`***`、`*****`、`***`、` *`。代码实现使用C++,直接打印预定义字符串完成。
84 0
C++11新特性探索:原始字符串字面值(raw string literal)
原始字符串字面值(raw string literal)是C++11引入的新特性。
166 0
|
存储 算法 C语言
【C++】对于string的补充(成员函数c_str()、大小写转换、字符串和实数之间的相互转换)
【C++】对于string的补充(成员函数c_str()、大小写转换、字符串和实数之间的相互转换)
89 0
|
物联网
CF1506C Double-ended Strings(差不多就是找最长串问题)
CF1506C Double-ended Strings(差不多就是找最长串问题)
54 0
将一个字符串的str的内容颠倒过来,并输出
将一个字符串的str的内容颠倒过来,并输出
fmt.Printf() 如果 format 里结尾没有 \n,输出的字符串串结尾会带有一个 '%'
fmt.Printf() 如果 format 里结尾没有 \n,输出的字符串串结尾会带有一个 '%'
|
存储 canal 算法
leetcode:43. 字符串相乘(附加一些C++string其他小练习)
leetcode:43. 字符串相乘(附加一些C++string其他小练习)
System.Xml.XmlException: 给定编码中的字符无效。 第 XX 行,位置 YY。
Invalid character in the given encoding. Line XX, position XX.解决方法 
4767 0

热门文章

最新文章