码迷,mamicode.com
首页 > 其他好文 > 详细

ZOJ 1729 Hidden Password (字符串最小表示)

时间:2015-09-15 21:51:03      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:

以前听过,不知道是什么,其实就是字符串首尾相连成一个环,n种切法求一个字典序最小的表示。

朴素算法大家都懂。O(n)的算法代码非常简单,最主要的思想是失配的时候尽可能大的移动指针。

另外附上一个不错的字符串算法总结:http://duanple.blog.163.com/blog/static/709717672009825004092/

#include<bits/stdc++.h>
using namespace std;

const int maxn = 1e5+5;
char s[maxn];

int main()
{
    //freopen("in.txt","r",stdin);
    int T; scanf("%d",&T);
    while(T--){
        int n; scanf("%d",&n);
        scanf("%s",s);
        int i = 0,j = 1, k = 0;
        while(i<n && j<n && k<n){
            int x = (i+k)%n, y = (j+k)%n;
            if(s[x] != s[y]){
                if(s[x] > s[y]) i += k+1;//如果不移动到这里,另外一边一定存在一个更小的前缀
                else j += k+1;
                k = 0;
            }else k++;
            if(i == j) j++;
        }
        printf("%d\n",i);
    }
    return 0;
}

 

ZOJ 1729 Hidden Password (字符串最小表示)

标签:

原文地址:http://www.cnblogs.com/jerryRey/p/4811391.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!