1. 程式人生 > 其它 >【例題4】字串環

【例題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;
}

部落格園:https://www.cnblogs.com/Juro/

Copyright ©2021 Juro

【轉載文章務必保留出處和署名,謝謝!】