/*
题意:在字符串全排列中,输出给出字符串后面的那一个字符串
思路:找规律,简单题,一次AC
*/
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
//freopen("data.in","r",stdin);
int len,cur;
char str[60],p[60];
while(1)
{
scanf("%s",str);
if(strcmp(str,"#")==0)
break;
len=strlen(str);
for(cur=len-2;cur>=0 && str[cur]>=str[cur+1];cur--);
if(cur<0)
printf("No Successor\n");
else
{
char c='z';
int pos;
for(int i=cur+1;i<len;i++)
if(str[i]>str[cur] && str[i]<c)
{
pos=i;
c=str[i];
}
str[pos]=str[cur];
str[cur]=c;
int u=0;
for(int i=cur+1;i<len;i++)
p[u++]=str[i];
p[u]=0;
sort(p,p+u);
u=0;
for(int i=cur+1;i<len;i++)
str[i]=p[u++];
printf("%s\n",str);
}
}
return 0;
}
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; int main() { while(1) { char str[60]; scanf("%s",str); if(strcmp(str,"#")==0) break; if(next_permutation(str,str+strlen(str))) printf("%s\n",str); else printf("No Successor\n"); } return 0; }
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; int main() { while(1) { char str[60]; scanf("%s",str); if(strcmp(str,"#")==0) break; if(next_permutation(str,str+strlen(str))) printf("%s\n",str); else printf("No Successor\n"); } return 0; }
本文介绍了一种算法,用于在给定字符串的全排列中找到下一个字符串。通过简单的步骤,实现一次AC(Accepted)的解决方案。
3万+

被折叠的 条评论
为什么被折叠?



