求符合条件的最大子串的长度
来源:互联网 发布:c 和java的三大框架 编辑:程序博客网 时间:2024/05/16 05:50
问题描述:
给出一些由英文字符组成的大小写敏 感的字符串的集合s,请找到一个最长的字符串x,使得对于s中任意字符串y,x或者是y的子串, 或者x中的字符反序之后得到的新字符串是y的子串。
输入:
输入的第一行是一个整数t (1 <= t <= 10), t表示测试数据的数目。对于每一组测试数据,第一行是一个整数n (1 <= n <= 100),表示已经给出n个字符串。接下来n行,每行给出一个长度在1 和100之间的字符串。
输出:对于每一组测试数据,输出一行,给出 题目中要求的字符串x的长度。
思路:不要随便拿,要拿输入数据中最短的那个。从长到短找出它的所有子串,直到找到否符合题目要求的。
#include <iostream>#include <cstring>using namespace std;int searchMaxSubString(char *source);//几个全局变量int t;//字符集个数int n;//每个字符集所含字符串个数char str[100][101];int i;//循环变量//反转字符串(利用双指针)char *revstr(char *str){ char *left; char *right; left = right = str; char tmpch; while(*right) { right++; } //此时right指向字符串的'\0' right--; while(left < right)//这样可以保证正常退出循环 { tmpch = *left; *(left++) = *right; *(right--) = tmpch; } return str;}int main(){ int minStrLen; char minstr[101]; int subStrLen; cin >> t; while(t--) { cin >> n; minStrLen = 100;//记录输入字符串中最短字符串的长度 for(i = 0; i < n; ++i) { cin >> str[i];//输入一组字符串 if(strlen(str[i]) < minStrLen) { strcpy(minstr, str[i]); minStrLen = strlen(minstr); } } subStrLen = searchMaxSubString(minstr);//最大字串的长度 cout << subStrLen << endl; } return 0;}int searchMaxSubString(char *source){ int sourceLen = strlen(source); int subStrLen = strlen(source); char subStr[101]; char reverseStr[101]; bool foundMaxStr; while(subStrLen > 0)//搜索不同长度的子串,从最长的字串开始 { /*搜索长度为subStrlen的全部字串,比如原串:abcdef(长度5) 长度5的子串1个,长度4的两个,长度3的3个... 原串与子串长度的差值(sourceLen - subStrLen)加1等于该长度的子串个数 */ for(int i = 0; i <= sourceLen - subStrLen; ++i) { strncpy(subStr, source + i, subStrLen); strncpy(reverseStr, source + i, subStrLen); subStr[subStrLen] = reverseStr[subStrLen] = '\0';//这句很重要,保证subStr长度的字符串以此 //长度结束 revstr(reverseStr);//反转字符串 foundMaxStr = true; //遍历所有输入的字符串 for(int j = 0; j < n; ++j) { if(strstr(str[j], subStr) == NULL && strstr(str[j], reverseStr) == NULL) { foundMaxStr = false; break; } } if(foundMaxStr) return subStrLen; } subStrLen--; }}
- 求符合条件的最大子串的长度
- 求最大回文子串的长度
- POJ 1844求符合条件的最大的数
- 找符合条件的最小子串
- 求对称子字符串的最大长度
- 求对称子字符串的最大长度
- 求最大公共子序列的长度
- Java求字符串的最大子串和长度
- 求两个数组的公共子数组的最大长度
- 求符合给定条件的整数集
- 求符合给定条件的整数集
- 求给定符合条件的整数集
- 求符合给定条件的整数集
- 求数组元素和是K的倍数的子串的最大长度
- SPOJ NSUBSTR 求每个对应的长度能产生的相同子串的最大个数
- 面试题-求一个串包含另一个串的最大子串长度的解法
- 蓝桥杯常用算法知识点:【递归】求两个串的最大公共子序列的长度
- 求一个字符串的最长不重复子串的最大长度
- Andorid 分享组件和评论组件
- javascript 将对象数组转换为json字符串
- UVA - 10763 Foreign Exchange(vector的使用)
- 泛型技巧系列:如何提供类型参数之间的转换
- 分组UITableVie
- 求符合条件的最大子串的长度
- ACE的线程
- 临时对象传递给non-const reference 参数是不允许的
- 修改pppd,提高openwrt中pppoe多拨成功率
- RegexKitLite in IOS5
- 完全卸载oracle11g步骤
- 关于nagios的一篇很不错的文章
- CentOS 6.3 切换桌面模式和命令行模式探索
- 从抽象谈起(三):AOP编程和ASP.NET MVC