1238 Substrings
2016-02-07 13:47
363 查看
Problem Description
You are given a number of case-sensitive strings of alphabetic characters, find the largest string X, such that either X, or its inverse can be found as a substring of any of the given strings.
Input
The first line of the input file contains a single integer t (1 <= t <= 10), the number of test cases, followed by the input data for each test case. The first line of each test case contains a single integer n (1 <= n <= 100), the number of given strings, followed by n lines, each representing one string of minimum length 1 and maximum length 100. There is no extra white space before and after a string.
Output
There should be one line per test case containing the length of the largest string found.
Sample Input
2
3
ABCD
BCDFF
BRCD
2
rose
orchid
Sample Output
2
2
搜索的入门题,取第一个字符串的所有字串,依次跟剩下的字符串进行匹配,唯一的优化是先将所有的字符串按照长度进行排序,使第一个字符串的长度最短,那样所产生的字串的可能性也就越小一点
You are given a number of case-sensitive strings of alphabetic characters, find the largest string X, such that either X, or its inverse can be found as a substring of any of the given strings.
Input
The first line of the input file contains a single integer t (1 <= t <= 10), the number of test cases, followed by the input data for each test case. The first line of each test case contains a single integer n (1 <= n <= 100), the number of given strings, followed by n lines, each representing one string of minimum length 1 and maximum length 100. There is no extra white space before and after a string.
Output
There should be one line per test case containing the length of the largest string found.
Sample Input
2
3
ABCD
BCDFF
BRCD
2
rose
orchid
Sample Output
2
2
搜索的入门题,取第一个字符串的所有字串,依次跟剩下的字符串进行匹配,唯一的优化是先将所有的字符串按照长度进行排序,使第一个字符串的长度最短,那样所产生的字串的可能性也就越小一点
#include<iostream> #include<string> #include<vector> #include<stdio.h> #include<algorithm> using namespace std; bool cmp(const string s1, const string s2){ return s1.length() < s2.length(); } int main(){ for (int case_num; scanf("%d", &case_num) != EOF;){ while (case_num--){ int num; scanf("%d", &num); vector<string>vec(num); for (int i = 0; i < num; i++){ cin >> vec[i]; } sort(vec.begin(), vec.end(), cmp); int max_len = 0; for (int i = 0; i < vec[0].length(); i++){ for (int len = 1; len <= vec[0].length() - i; len++){ string sub_str = vec[0].substr(i, len); int flag = 0; for (int index1 = 1; index1 < vec.size(); index1++){ //cout << "sub_str:" << sub_str << " str:" << vec[index1] << " find:" << vec[index1].find(sub_str, 0) << endl; if (vec[index1].find(sub_str, 0) >= vec[index1].length()){ flag = 1; break; } } if (!flag){ if (len >= max_len){ max_len = len; } continue; } reverse(sub_str.begin(), sub_str.end()); flag = 0; for (int index1 = 1; index1 < vec.size(); index1++){ //cout << "sub_str:" << sub_str << " str:" << vec[index1] << " find:" << vec[index1].find(sub_str, 0) << endl; if (vec[index1].find(sub_str, 0) >= vec[index1].length()){ flag = 1; break; } } if (!flag){ if (len >= max_len){ max_len = len; } continue; } } } printf("%d\n", max_len); } } return 0; }
相关文章推荐
- Activity
- 学习Hibernate源码——配置文件解析,SessionFactory创建
- [置顶] 宿主机-开发板设置NFS共享目录(1)
- 大数据IMF 传奇 8台设备如何实现免密码的SSH登录呢 ?脚本分发 解决方案
- 自学帝国CMS---网站搬家
- HDU3037 Saving Beans(Lucas定理+乘法逆元)
- BestCoder Round #71 (div.2)-KK's Steel(斐波那契数列)
- [Spring实战系列](12)Bean的自动装配
- 递推-hdu1041 Computer Transformation
- 在html在添加cookie和读取cookie
- hdu 1598 find the most comfortable road 枚举+并查集
- WMI技术介绍和应用——Instance/Method Provider
- python_简单的ssh客户端
- 大牛给的ACM进阶建议
- 界面中单元格值的颜色随着值的变化而变化技巧
- IOS属性--UIWebView
- api接口
- Bestcoder#70
- 平台常用物理表名
- 构件的查询功能