【例题4】字符串环

【例题4】字符串环
题面

题目描述

有两个由字符构成的环。

请写一个程序,计算这两个字符环上最长连续公共字符串的长度。

例如,字符串 ABCEFAGADEGKABUVKLM 的首尾连在一起,构成一个环;字符串 MADJKLUVKL 的首尾连在一起,构成另一个环;UVKLMA 是这两个环的一个连续公共字符串。

输入格式

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

输出格式

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

样例

样例输入

ABCEFAGADEGKABUVKLM MADJKLUVKL

样例输出

6
分析
  • 注意到字符串长度不超过255,故考虑暴力枚举

  • (find()函数的解释请见移位包含的分析)

字符串的 erase() 函数,形如 s.erase(pos, len)

删除字符串 s 中从 pos 开始的长度为 len 的字符

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

string s1, s2;
int ans;

int main(void) {
    cin >> s1 >> s2;
    s1 += s1;
    s2 += s2;
    while (s2.size()) {
        for (int i = 1; i < s2.size(); ++i) {
            if (s1.find(s2.substr(0, i)) != s1.npos) {
                ans = max(ans, i);
            }
        }
        s2.erase(0, 1);
    }
    cout << ans;
    return 0;
}

posted @ 2021-07-14 23:02  Juro  阅读(139)  评论(0编辑  收藏  举报