Virtual Judge:https://vjudge.net/contest/381114#problem 洛谷:https://www.luogu.com.cn/problem/CF518A 题目:给定两个等长的字符串,判断字符串s与字符串t之间,是否有其他字符串(字典序排列) 思路:把字符串当做26进制的大数进行比较,先把s+1,然后判断是否小于t,小于就直接输出s+1,否则输出"No such string"
#include<cstdio> #include<cstring> #include<cmath> #include<iostream> #include<algorithm> using namespace std; char s[105],t[105]; int main() { int l,flag=1; scanf("%s%s",s,t); l=strlen(s); s[l-1]++; for(int i=l-1;i>=0;i--) { if(i==0&&s[0]>'z') { flag=0; break; } if(s[i]>'z') { s[i-1]++; s[i]='a'; } } for(int i=0;i<l;i++) { if(!flag)break; if(s[i]>t[i])flag=0; if(s[i]<t[i])break; if(i+1==l&&s[i]==t[i])flag=0; } if(flag) { for(int i=0;i<l;i++) { printf("%c",s[i]); } } else { printf("No such string"); } return 0; }