1 条题解
-
0
C :
#include<stdio.h> #include<string.h> int main() { int l, maxn, cnt,i,k,j,t,len; char s[60], *s1, *s2, *ans; scanf("%d", &l); scanf("%s",s); len =strlen(s); maxn = cnt = 0; for(i = l; i <= len; i++) { for(j = 0; j + i <= len; j++) { cnt = 0; s1= &s[j]; for(k = 0; k+i <= len; k++) { s2 = &s[k]; if(!strncmp(s1,s2,i)) cnt++; } if(cnt >= maxn) { if(cnt==maxn&&i>t) { t=i; ans = s1; maxn = cnt; }else if(cnt > maxn) { t=i; ans = s1; maxn = cnt; } } else if(cnt == maxn && strlen(s1) > strlen(ans)){ ans = s1; } } } for(k=0;k<t;k++) { printf("%c",*(ans+k)); } return 0; }C++ :
#include <bits/stdc++.h> using namespace std; //注意条件 :出现最大次数相等,输出步长最长的那个字符串 // 步长从L到 S.length()找起 // 在同一步长内,如果相等找最先出现的 int main(){ int L; //步长大于0 int a[60]; //一个暂时记录每个步长中相等的函数 int b[60];//记录步长 int c[60];//记录每个步长的最大值 int maxl[60];//记录每个步长最符合条件的字符串出现的次数 int index = 0; //初始化b c数组 memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); memset(maxl,0,sizeof(maxl)); //输入操作 string s;//n<=60;S中的字符都是小写字母 scanf("%d",&L);//0<L<n cin>>s; //开始查找最大值 while(L<s.length()){ //初始化数组a memset(a,0,sizeof(a)); //依次找出L步长内所有的可能相等的个数 for(int i=0;(i+L)<=s.length();i++){ string s1 = s.substr(i,L); for(int j=i;(j+L)<=s.length();j++){ string s2 = s.substr(j,L); if(s1.compare(s2)==0) a[i]++; } } //找出a数组中的最大值 int temp = 0; for(int k=0;k<s.length();k++) { if(a[k]>a[temp]) temp = k; } b[index] = temp;//从temp处开始步长为L的字符串符合条件 c[index] = L; maxl[index] = a[temp]; index++; L++; } //找出最合适的字符串 int max = 0; for(int i=0;i<s.length();i++){ if(maxl[i]>=maxl[max]) max = i; } //输出求得的结果 cout<<s.substr(b[max],c[max]); }
- 1
信息
- ID
- 869
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者