uva 1584 Circular Sequence(环状串的最小字典序表示法)

来源:互联网 发布:js 检测string 编辑:程序博客网 时间:2024/03/29 19:20

点击打开链接

没什么难点,直接遍历下标比较就行。用变量ans表示当前字典序最小表示方法在该串中的起始位置,

然后移动下标比较字典序,不断更新ans即可。

#include<cstdio>#include<cstdlib>#include<iomanip>#include<string>#include<iostream>#include<cstring>using namespace std;const int maxn = 110;int less_(const char *s, int p, int q)//比较字符串s的p表示方法字典序是否比q表示方法小。{    int len = strlen(s);    for(int i = 0; i < len; i++)    {        if(s[(p+i)%len] != s[(q+i)%len])            return s[(p+i)%len] < s[(q+i)%len];    }    return 0;//如果两种表示方法字典序相同,返回0.}int main(){    int kase;    char s[maxn];    scanf("%d",&kase);    while(kase--)    {        scanf("%s",s);        int len = strlen(s), ans = 0;        for(int i = 1; i < len; i++)        {            if(less_(s, i, ans))                ans = i;        }        for(int i = 0; i < len; i++)        {            putchar(s[(ans+i) % len]);        }        putchar('\n');    }    return 0;}


0 0
原创粉丝点击