字符串最小表示法
其实就是用双指针进行一个自我比较。 模板:
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
cin >> s;
int original_length = s.size();
// 将每个字符添加到字符串的末尾
for (int i = 0; i < original_length; i++) {
s.push_back(s[i]);
}
// 输出新的字符串
for (int i = 0; i < s.size(); i++) {
cout << s[i];
}
cout << endl;
// 初始化变量 n 为原始字符串的长度
int n = original_length;
int i = 0, j = 1;
// 使用双指针法找到最小字典序的子串
while (i <= n && j <= n) {
int k;
for (k = 0; k < n && s[i + k] == s[j + k]; k++);
if (k == n) break; // 如果找到了一个匹配的子串,退出循环
if (s[i + k] > s[j + k]) {
i = i + k + 1; // 移动 i 指针
if (i <= j) i = j + 1; // 确保 i 和 j 不重叠
}
else {
j = j + k + 1; // 移动 j 指针
if (i >= j) j = i + 1; // 确保 i 和 j 不重叠
}
}
// 输出最小字典序的子串
for (int r = i; r < i + n; r++) {
cout << s[r];
}
cout << endl;
return 0;
}
标签:int,最小,表示法,++,字符串,size
From: https://www.cnblogs.com/AnnaStore/p/18602043