POJ3080 Blue Jeans

题目链接

 

题目大意:

给定n个字符串,找出最长相同且长度大于3的子串,如果存在多个,找出字典序最小的。

 

分析:

直接枚举(暴搜)。

对于s[0]的每一个子串,判断是否在其它n-1个字符串中都存在。

 

#include <iostream>
#include <cstdio>
#include <string>
#include <map>

using namespace std;

#define N 60

string s[30], str, str_max;

int main(){
    int T, n, max_len;

    scanf("%d", &T);

    while(T--) {
        scanf("%d", &n);
        max_len = 0;
        m.clear();

        for(int i=0; i<n; i++) {
            cin >> s[i];
        }

        for(int i=0; i<N; i++) {
            for(int j=i+3-1; j<N; j++) {
                if(j-i+1 < max_len) continue;
                str = s[0].substr(i, j-i+1);
                int k;
                for(k=1; k<n; k++) {
                    if(s[k].find(str) == s[k].npos) {   //未找到
                        break;
                    }
                }

                if(k >= n && str.length() >= max_len) {    //找到
                    if(str.length() == max_len){
                        if(str < str_max) str_max = str;
                    }
                    else {
                        max_len = str.length();
                        str_max = str;
                    }
                }
            }
        }

        if(max_len) cout << str_max << endl;
        else printf("no significant commonalities\n");
    }

    return 0;
}

 

 

posted on 2013-07-29 15:02  Still_Raining  阅读(181)  评论(0编辑  收藏  举报