[AcWing 779] 最长公共字符串后缀

image


点击查看代码
#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 个字符
posted @   wKingYu  阅读(113)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
欢迎阅读『[AcWing 779] 最长公共字符串后缀』
点击右上角即可分享
微信分享提示