hdu 1238 Substrings (最长相同连续子序列)

来源:互联网 发布:淘宝网企业店铺标志 编辑:程序博客网 时间:2024/06/10 00:18

http://acm.hdu.edu.cn/showproblem.php?pid=1238

求几个序列的最长相同子序列,这道题本来一直在想怎么用dfs方法解决,后来看了大牛的结题思路,才明白字符串的长度才100,穷举也可以过。
只要先找到最短的子序列,遍历出一个子序列,把它的顺逆序列分别保存到s1和s2中,再用strstr()函数就可以了。
代码:

#include<iostream>using namespace std;int T,n;char str[105][105],s1[105],s2[105];int main(){    cin >> T;    int MIN,len,f,flag,MAX;    while (T--)    {        flag = 1;        MIN = 200;        cin >> n;        for (int i = 0; i < n; i++){            scanf("%s",str[i]);            len = strlen(str[i]);            if (MIN>len){                MIN = len;                f = i;            }        }        len = strlen(str[f]);        MAX = 0;        for (int i = 0; i < len; i++){            for (int j = i; j < len&&flag; j++){                for (int k = i; k <= j; k++){                    s1[k-i] = str[f][k];                    s2[j-k] = str[f][k];                }                s1[j - i + 1] = s2[j - i + 1] = '\0';                int l = strlen(s1);                if (l < MAX) continue;                for (int k = 0; k < n; k++){                    if (!strstr(str[k], s1) && !strstr(str[k], s2)){                        flag = 0;                        break;                    }                }                if (l>MAX&&flag){                    MAX = l;                }            }flag = 1;        }        cout << MAX << endl;    }    return 0;}
0 0
原创粉丝点击