poj3080 Blue Jeans

本文介绍了一种用于寻找多组字符串中最长公共子串的算法实现,通过暴力枚举方式,逐步扩大子串范围并检查其是否存在于所有字符串中,确保找到符合要求的最长且字典序最小的公共子串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//题意:给定t组数据,每一组数据有m组字符串,寻找这m条字符串的最长字符串,若长度相等输出字典数最小的,即总头到位比较最小的字符串
//思路:暴力以第一条串为母串从3个枚举到60个,并与其他串进行比较,然后根据题目要求输出
#include <cstring>
#include <iostream>

using namespace std;

int main()
{
    ios::sync_with_stdio(false);    
    cin.tie(0);
    int t;
    cin >> t;
    while(t--){
        int m;
        cin >> m;
        string s[15];
        for(int i = 0; i < m; i++){
            cin >> s[i];
        }
        string res = ""; //出当前测试最长串
        for(int i = 3; i <= 60; i++){
            for(int j = 0; j <= 60-i; j++){
                string test = s[0].substr(j, i);
                bool flag = true;
                for(int k = 1; k < m; k++){
                    if(s[k].find(test) == string :: npos){  //作为一个返回值表示没有匹配到的话
                        flag = false;
                        break;
                    }
                }
                if(flag && test.length() > res.length()){   //长度不等选长的
                    res = test;
                }
                else if(flag && test.length() == res.length() && test < res){   //长度相等选字典数小的
                    res = test;
                }
            }
        }
        if(res == "") cout << "no significant commonalities\n";
        else cout << res << '\n';
    }
    return 0;
}

ios::sync_with_stdio(false);   

 //cin与stdin总是保持同步的,也就是说这两种方法可以混用,而不必担心文件指针混乱,同时cout和stdout也一样,两者混用不会输出顺序错乱。正因为这个兼容性的特性,导致cin有许多额外的开销,如何禁用这个特性呢?只需一个语句std::ios::sync_with_stdio(false);,这样就可以取消cin于stdin的同步了。

substr(a,b)表示从a下标开始截取长度为b的字符串

find函数会返回第一次碰到该串的第一个下标,string::npos作为返回值表示没有匹配到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值