hdu1238——Substrings——————【求多个字串的最长公共子串】
来源:互联网 发布:java老师王克晶年薪 编辑:程序博客网 时间:2024/05/22 15:02
/** 解题思路:因为给的数据范围比较小,所以就是暴力思想。首先找出最短的串,然后从短到长截取子串,遍历除最短串以外的其他串,看是否含有相同的子串。*//*题目大意:给t组测试数据,每组有一个n,代表有n个字符串,求n个字符串中含有的最长公共子串,此处,逆序也算是公共子串,如abc与cba。*//*处理string的函数。1)a.substr(i,j)将a串从i位置开始截取j个字符形成子串。2)a.compare(i,len,b,j,len)a串从i位置开始取len个字符与b串从j位置开始取len个字符进行比较,如果完全相同,返回0。3)reverse(a.begin(),a.end())将字串颠倒顺序。*/#include<iostream>#include<string.h>#include<stdio.h>#include<algorithm>#include<string>using namespace std;const int maxn=110;string s[maxn];bool cmp(string a,string b){ return a.size()<b.size();}bool search_same(string a,string b,int len){ //查找字符串b中是否含有子串a int len_b=b.size(); for(int i=0;i<=len_b-len;i++){ if(!a.compare(0,len,b,i,len)){ return true; } } reverse(a.begin(),a.end()); for(int i=0;i<=len_b-len;i++){ if(!a.compare(0,len,b,i,len)){ return true; } } return false;}int main(){ int t; scanf("%d",&t); while(t--){ int n; scanf("%d",&n); for(int i=0;i<n;i++){ cin>>s[i]; } sort(s,s+n,cmp); int lmin_s=s[0].size(); int max_len=0; for(int i=1;i<=lmin_s;i++){ //i代表截取子串的长度 int flag=0;//其他n-1个字符串中是否都含有公共子串 for(int j=0;!flag&&j<=lmin_s-i;j++){ //j代表枚举出的子串的串首位置 string tmp_s=s[0].substr(j,i); int k; for( k=1;k<n;k++){ //遍历其他n-1个字符串 if(!search_same(tmp_s,s[k],i)){ break; } } if(k==n){ //都含有公共子串 flag=1; } } if(flag==1){ max_len=i; }else{break;} } cout<<max_len<<endl; } return 0;}
0 0
- hdu1238——Substrings——————【求多个字串的最长公共子串】
- HDU1238 Substrings(kmp,最长公共子串)
- ACM-字符串处理之Substrings——hdu1238
- 算法导论—最长公共子串
- 最长公共子序列变种——带权的最长公共子序列
- HDU1238 POJ1226 Substrings 最长公共子串(子反串也算)
- Poj1159——最长公共子序列
- Poj1458——最长公共子序列
- poj2192——最长公共子序列
- NYOJ36——最长公共子序列
- lCS——最长公共子序列
- 最长公共子序列——LCS
- 算法导论—最长公共子序列
- 算法导论—最长公共子序列
- 最长公共子序列—C语言
- 最长公共子序列的nlogn算法——bsoj1139
- 最长公共子序列问题—水水的Dp
- 动态规划—输出所有的最长公共子序列
- 取精华、去糟粕!适合iOS开发者的15大网站推荐
- Leetcode NO.38 Count and Say
- 理解Linux系统负荷 查看CPU个数
- 饿了么网站订餐外卖系统功能介绍
- 董老师走进斯坦福讲座
- hdu1238——Substrings——————【求多个字串的最长公共子串】
- C#设计模式学习笔记-单例模式
- EditText使用详解-包含很多教程上看不到的功能演示
- 10个无版权限制的免费图片素材资源网站
- 一些linux系统命令
- Android adb命令使用
- 【LeetCode】Linked List Cycle II
- uni1->C#->装箱拆箱
- Git删除空目录