字典序

来源:互联网 发布:软件测试书籍下载 编辑:程序博客网 时间:2024/06/05 12:44

题目:

维塔利是一个勤奋的学生,在大学阶段,他从来没有逃过一堂课。他总是按时做作业,并顺利通过考试。
 
在最后一节课,老师给了他两个字符串s和t。这两个字符串的长度相同,由小写英文字母组成,字符串s的字典序比串t小。维塔利想知道是否有这样的字符串:字典序比字符串s大,同时字典序小于串t。此字符串也应包括小写英文字母和相同的长度。
 
让我们帮维塔利解决这个简单的问题!

Input

第一行包含字符串s(1≤|s| ≤100),由小写英文字母组成。这里,|s| 表示字符串s的长度。
 
第二行包含字符串t(|t|=|s| ),由小写英文字母组成。
 
保证字符串s和t的长度是相同的,字符串s字典顺序小于字符串t。

Output

如果满足要求的字符串不存在,则输出No such string。
 
如果这样的字符串存在,就输出任何一个满足条件的字符串。( 也只能由小写英文字母a-z组成)

Sample Input

输入样例1:
a
c
 
输入样例2:
aaa
zzz
 
输入样例3:
abcdefg
abcdefh

Sample Output

输出样例1:
b
 
输出样例2:
kkk
 
输出样例3:
No such string

 

解题思路:

只需要找出比s字典序大一且小于t字典序的字符串即可,若没有就输出No such string,这里需要注意的一点是,对字典序加一的理解:

例如:s串为az;t串为bc;那么它们之间的串为ba,而不是bz;

s串加一时,如遇到z字符要对z字符特殊处理,不能让z字符直接加一,应该将本位变为a字符,向前进一位;

 

代码如下:

#include<cstdio>

#include<cstring>

using namespace std;

int main()

{

   char a[200],b[200];

   while(~scanf("%s%s",a,b)){

       int l=strlen(a);

       while(a[--l]=='z') a[l]='a'; //处理z字符;

         a[l]+=1;

        if(strcmp(a,b)<0)printf("%s\n",a);// 若该字符串仍小于 t 则输出

       else printf("No such string\n");

    }

   return 0;

}

0 0
原创粉丝点击