字符串最小表示 模板
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+10;
int MinRepresentation(const char *s, int len){
int i, j, k;
i = k = 0;
j = 1;
while(i < len && j < len){
k = 0;
while(k < len && s[i+k] == s[j+k]) k++;
if (k == len) return i;
if (s[i+k] > s[j+k]) i = i+k+1;
else j = j+k+1;
if (i == j) j++;
}
return min(i, j);
}
char s[maxn*2], tmp[maxn];
int main(){
int n;
std::ios::sync_with_stdio(false);
cin >> n;
while(n--){
int len;
cin >> len >> s;
strncpy(tmp, s, len);
strcat(s, tmp);
cout << MinRepresentation(s, len) << endl;
}
return 0;
}

本文介绍了一个用于寻找字符串最小表示的算法实现。通过比较字符串的不同起始位置,该算法能够找到并返回最小的旋转等价串的起始索引。代码采用C++编写,并通过输入多个字符串长度及内容进行测试。
6340

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



