1. 程式人生 > 其它 >[AcWing 779] 最長公共字串字尾

[AcWing 779] 最長公共字串字尾


點選檢視程式碼
#include<iostream>

using namespace std;
const int N = 200;
string str[N];
int n ;
int main()
{
    while (cin >> n, n) {
        int len = 1000;
        for (int i = 0; i < n; i++) {
            cin >> str[i];
            if (str[i].size() < len)    len = str[i].size();
        }
        while (len) {
            bool success = true;
            for (int i = 1; i < n; i++) {
                bool is_same = true;
                for (int j = 1; j <= len; j++) {
                    if (str[i][str[i].size() - j] != str[0][str[0].size() - j]) {
                        is_same = false;
                        break;
                    }
                }
                if (!is_same) {
                    success = false;
                    break;
                }
            }
            if (success)    break;
            len --;
        }
        cout << str[0].substr(str[0].size() - len) << endl;
    }
    return 0;
}

  1. 找到最短字串長度,最長公共字尾長度一定小於等於最短字串長度,故先讓 len 等於最短字串的長度,不滿足時就 len -- ,直到找到最大公共字尾的長度
  2. 將第一個字串 str[0] 的後 len 個字元作為參照,依次列舉其餘字串,並把每一個字串的後 len 個字元逐個與 str[0] 的後 len 個字元進行比較,只要出現不相等的情況,說明此時的 len 不是最大公共字尾的長度,退出迴圈,執行 len --
  3. 輸出時使用 substr 輸出 str[0] 的後 len 個字元