前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【题解】Alphabetical Strings

【题解】Alphabetical Strings

作者头像
MikeC
发布2022-09-21 15:01:23
3120
发布2022-09-21 15:01:23
举报
文章被收录于专栏:MikeC's BlogMikeC's Blog

题目描述

A string s of length n ( 1 \le n \le 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.

输入格式

The first line contains one integer t ( 1 \le t \le 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 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).

输入输出样例

输入 #1

代码语言:javascript
复制
11
a
ba
ab
bac
ihfcbadeg
z
aa
ca
acb
xyz
ddcba

输出 #1

代码语言:javascript
复制
YES
YES
YES
YES
YES
NO
NO
NO
NO
NO
NO

说明/提示

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

分析

要判断字符串是否是通过按字典序依次在前后累加字母得到的,我们只需要按倒字典序依次扫描字符串的第一个和最后一个字母,如果第一个和最后一个字母都不是当前按倒字典序轮询到的字母,则该字符串不是通过按字典序依次在前后累加字母得到的。

因为 n \le 26,所以任意字母都不可能出现两次,因此我们只需要将 26 个字母轮询一遍,代码实现较为简单。

代码

代码语言:javascript
复制
#include<bits/stdc++.h>
using namespace std;
int t,l,r,i,flag;
char a[30];
char ch[27]={0,'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
int main(){
    scanf("%d",&t);
    while(t--){
        cin>>a+1;
        l=1,flag=0;
        i=r=strlen(a+1);
        while(l<=r){
            if(a[l]==ch[i]){
                l++;i--;
                continue;
            }
            if(a[r]==ch[i]){
                r--;i--;
                continue;
            }
            flag=1;
            printf("NO\n");
            break;
        }
        if(!flag)printf("YES\n");
    }
    return 0;
}

最后修改:2021 年 07 月 20 日 10 : 43 AM

© 允许规范转载

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021 年 07 月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
  • 输入格式
  • 输出格式
  • 输入输出样例
    • 输入 #1
      • 输出 #1
      • 说明/提示
      • 分析
      • 代码
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档