找到环状序列的最小字典表示

来源:互联网 发布:手机qq皮肤制作软件 编辑:程序博客网 时间:2024/04/29 22:28
代码:
#include<stdio.h>#include<string.h>#define maxn 105//比较字典序 int cmp(char* s,int p,int q) {//返回以p开头表示的环状序列是否比以q开头表示的的字典序小int n = strlen(s);for(int i=0;i<n;i++) {if(s[(p+i)%n] != s[(q+i)%n]) return s[(p+i)%n] < s[(q+i)%n];//循环问题: 模除于数组长度! }return 0;}int main(void) {char s[maxn];scanf("%s",s);int min = 0;int len = strlen(s);for(int i=1;i<len;i++) {if(cmp(s,i,min)) min = i;}for(int i=0;i<len;i++) {printf("%c",s[(min+i)%strlen(s)]);}}

0 0
原创粉丝点击