百炼OJ 2744找相同子串
2012-08-11 09:27
260 查看
看到这个题,我首先想的是怎么样找出每一个输入的字符串中相同的子串然后将其保存起来,因为数组是动态输入的,每输入一次都要保存好几次,这个过程势必会很麻烦,突然就一下子没了思路。看了一个AC过的网友的代码,令我豁然开朗,用一个全局数组就可以解决动态输入变化的数组。然后充分利用字符串函数来进行求解,首先从输入的字符串中找出最小的子串,再从这个子串中枚举找出符合条件的子串。具体见下面的代码。
char str[100][101]; int FindMaxSameSubString(const char *s, int n){ int sourceLen = strlen(s); int subLen = strlen(s); char subStr[101]; //保存最小子串 char revsubStr[101]; //保存最小字串的反串 while(subLen > 0){ //从最大的子串开始找 for(int i = 0; i <= sourceLen - subLen; ++i){ //枚举所有子串 strncpy(subStr, s + i , subLen); strncpy(revsubStr, s + i , subLen); subStr[subLen] = revsubStr[subLen] = '\0'; strrev(revsubStr); bool find = true; for(int j = 0; j != n; ++j){ //和全局数组进行比较 if(strstr(str[j],subStr) == NULL && strstr(str[j] ,revsubStr) == NULL){ find = false; //不满足就结束本次循环 break; } } if (find) return(subLen); } subLen --; //子串长度减小,继续在剩余的子串中找 } return 0; }
相关文章推荐
- 百炼OJ 2744 子串
- 查找目标字符串中的子串,可识别大小写,大写和小写认为相同
- GEEK编程练习— —最长相同的子串
- 将字符串中相邻相同的子串合并为一个子串
- spoj694 不相同的子串的个数(后缀数组)
- 编写程序,获取两个字符串中最大相同子串
- 获取两个字符串中最大的相同子串
- 编程找出字符串的最长子串,要求子串的所有字符相同
- 输出相同的子串
- 15-11-常用对象API(String类-练习3-最大相同子串)
- 找出字符串的最长子串,要求子串的所有字符相同 例如:str ="sssddddabcdef" 则输出字串为:dddd
- C++_USACO_求一个字符串的从开头字母开始,直到发现某一不相同字母时,这个子串的长度
- 最大的相同字符子串
- 【SPOJ 694】Distinct Substrings 不相同的子串的个数
- Java String 字符串中的最大相同子串实现
- 两个字符串中最大相同的子串
- 找出一个字符串中最长连续相同子串
- SPOJ694 Distinct Substrings, 后缀数组, 不相同的子串的个数
- leetcode_424. Longest Repeating Character Replacement 求替换k个字符后连续相同字符子串的长度,滑动窗口的应用