看到这个题,我首先想的是怎么样找出每一个输入的字符串中相同的子串然后将其保存起来,因为数组是动态输入的,每输入一次都要保存好几次,这个过程势必会很麻烦,突然就一下子没了思路。看了一个AC过的网友的代码,令我豁然开朗,用一个全局数组就可以解决动态输入变化的数组。然后充分利用字符串函数来进行求解,首先从输入的字符串中找出最小的子串,再从这个子串中枚举找出符合条件的子串。具体见下面的代码。
1 char str[100][101];
2 int FindMaxSameSubString(const char *s, int n){
3 int sourceLen = strlen(s);
4 int subLen = strlen(s);
5 char subStr[101]; //保存最小子串
6 char revsubStr[101]; //保存最小字串的反串
7 while(subLen > 0){ //从最大的子串开始找
8 for(int i = 0; i <= sourceLen - subLen; ++i){ //枚举所有子串
9 strncpy(subStr, s + i , subLen);
10 strncpy(revsubStr, s + i , subLen);
11 subStr[subLen] = revsubStr[subLen] = '\0';
12 strrev(revsubStr);
13 bool find = true;
14 for(int j = 0; j != n; ++j){ //和全局数组进行比较
15 if(strstr(str[j],subStr) == NULL && strstr(str[j] ,revsubStr) == NULL){
16 find = false; //不满足就结束本次循环
17 break;
18 }
19 }
20 if (find) return(subLen);
21 }
22 subLen --; //子串长度减小,继续在剩余的子串中找
23 }
24 return 0;
25 }
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有