字符环-题解

描述

有两个由字符构成的环。请写一个程序,计算这两个字符环上最长连续公共字符串的长度。
例如,字符串“ABCEFAGADEGKABUVKLM”的首尾连在一起,构成一个环;字符串“MADJKLUVKL”的首尾连在一起,构成一个另一个环;“UVKLMA”是这两个环的一个连续公共字符串。

输入描述

一行,包含两个字符串,分别对应一个字符环。这两个字符串之间用单个空格分开。字符串长度不超过255,且不包含空格等空白符。

输出描述

输出一个整数,表示这两个字符环上最长公共字符串的长度。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <bits/stdc++.h>
using namespace std;

int main() {
string s1, s2;
int max = 0, t = 0;
cin >> s1 >> s2;
if (s1.size() < s2.size()) {
swap(s1, s2);
}
int n = s1.size();
s1 = s1 + s1;
s2 = s2 + s2;
for (int i = 0; i < s1.size(); i++) {
for (int j = 0; j <= s2.size(); j++) {
while (s1[i + t] == s2[j + t]) {
t++;
if (t >= max && t <= n) {
max = t;
}
}
t = 0;
}
}
cout << max;
return 0;
}

字符环-题解
https://chenxi-tijie.pages.dev/2025/07/字符环-题解/
作者
chenxi
发布于
2025年7月4日
许可协议