[AcWing 779] 最長公共字串字尾
阿新 • • 發佈:2022-04-15
點選檢視程式碼
#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; }
- 找到最短字串長度,最長公共字尾長度一定小於等於最短字串長度,故先讓 len 等於最短字串的長度,不滿足時就 len -- ,直到找到最大公共字尾的長度
- 將第一個字串 str[0] 的後 len 個字元作為參照,依次列舉其餘字串,並把每一個字串的後 len 個字元逐個與 str[0] 的後 len 個字元進行比較,只要出現不相等的情況,說明此時的 len 不是最大公共字尾的長度,退出迴圈,執行 len --
- 輸出時使用 substr 輸出 str[0] 的後 len 個字元