字符串最小表示法 O(n)算法】的更多相关文章

原博客链接:http://blog.csdn.net/zy691357966/article/details/39854359 未授权,侵权删. 因为这篇博客写得真好..转载了.. 红色的字是原博主写的,蓝色的字是我加的. ------------------------------------------------------------------------------------------------------------------------------------------…
链接:https://ac.nowcoder.com/acm/contest/328/A来源:牛客网 题目描述 Rabbit得到了一个字符串,她的好朋友xxx可以给这个字符串施加一次魔法. 魔法可以选择字符串的任一位置,并将该位置后面的所有字符水平拼接到串首. 例如:对于字符串abcde,可以通过施加魔法得到cdeab. 如果xxx通过施加魔法将字符串的字典序变得严格比之前的小,那么他将拿走这一字符串. Rabbit想知道自己的字符串会不会被xxx拿走. 输入描述: 第一行一个整数n,表示字符串…
Time Limit: 10 Sec  Memory Limit: 259 MB 给定一个字符串S = {S1, S2, S3 … Sn}, 如果在串SS中, 子串T(|T| = n)为所有长度为n的SS的字串中最小的(字符串的比较), 则称T为”奇怪的字串”. 你的任务就是找出这个字符串. 读入两行, 第一行为n, 第二行为字符串S. 将”奇怪的字串” T输出输入样例 Sample Input 10 asdfasdfas Sample Output asasdfasdf HINT 对于100%…
题意:给一个字符串,求它的最小子串,使得原串是通过它重复得到的字符串的一个子串. 思路:先求最小长度,最小循环长度可以利用kmp的next数组快速得到,求出长度后然后利用字符串最小表示法求循环节的最小表示即可. #pragma comment(linker, "/STACK:10240000") #include <map> #include <set> #include <cmath> #include <ctime> #include…
Description 给定两个项链的表示,判断他们是否可能是一条项链. Input 输入文件只有两行,每行一个由0至9组成的字符串,描述一个项链的表示(保证项链的长度是相等的). Output 如果两条项链不可能同构,那么输出’No’,否则的话,第一行输出一个’Yes’ 第二行输出该项链的字典序最小的表示. 设L = 项链长度,L <= 1000000. Sample Input 22343424232423223434 Sample Output Yes2234342423 Solution…
题目链接: http://poj.org/problem?id=1509 题意: 求循环字符串的最小表示. 分析: 浅析"最小表示法"思想在字符串循环同构问题中的应用 判断两字符串是否是循环同构的过程就是在求字符串的最小表示,即如果两个字符串是循环同构的,那么当前两指针i=M(s1) 且j=M(s2) 的时候,一定可以得到u[i→i+s1−1] = w[j→j+s2−1] , 所以我们把给定序列看成两个循环同构的字符串,然后求一下最小表示就好了. 代码: #include<cst…
网上看了这篇文章后还是感觉有些地方讲的没有详细的证明所以添加了一点 红色字是博主写的 求字符串的循环最小表示: 上面说的两个字符串同构的,并没有直接先求出Min(s),而是通过指针移动,当某次匹配串长时,那个位置就是Min(s).而这里的问题就是:不是给定两个串,而是给出一个串,求它的Min(s),eg:Min("babba") = 4.那么由于这里并非要求两个串的同构,而是直接求它的最小表示,由于源串和目标串相同,所以处理起来既容易又需要有一些变化:我们仍然设置两个指针,i, j,其…
Give you a string with length N, you can generate N strings by left shifts. For example let consider the string “SKYLONG”, we can generate seven strings: String Rank SKYLONG 1 KYLONGS 2 YLONGSK 3 LONGSKY 4 ONGSKYL 5 NGSKYLO 6 GSKYLON 7 and lexicograp…
还需要再消化一下这个算法.. 今天没有时间了,, 六级过了 就有大把时间 快活啊!#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<set> using namespace std; int getmin(string s) { int n=s.size(); int i,t; while(i<n && j<n…
Rabbit的字符串 #include<bits/stdc++.h> using namespace std; ; char s[maxn]; int get_min_pos() { , cmp = , k = , t, len = strlen(s); while (ans<len && cmp<len && k<len) { int t = s[(ans+k)%len]-s[(cmp+k)%len]; if (!t) k++; else {…