算法训练 字串统计
http://lx.lanqiao.org/problem.page?gpid=T219
算法训练 字串统计
时间限制:1.0s 内存限制:512.0MB
问题描述
给定一个长度为n的字符串S,还有一个数字L,统计长度大于等于L的出现次数最多的子串(不同的出现可以相交),如果有多个,输出最长的,如果仍然有多个,输出第一次出现最早的。
输入格式
第一行一个数字L。
第二行是字符串S。
L大于0,且不超过S的长度。
第二行是字符串S。
L大于0,且不超过S的长度。
输出格式
一行,题目要求的字符串。
输入样例1:
4
bbaabbaaaaa
输出样例1:
bbaa
输入样例2:
2
bbaabbaaaaa
输出样例2:
aa
输入样例1:
4
bbaabbaaaaa
输出样例1:
bbaa
输入样例2:
2
bbaabbaaaaa
输出样例2:
aa
数据规模和约定
n<=60
S中所有字符都是小写英文字母。
提示
枚举所有可能的子串,统计出现次数,找出符合条件的那个
S中所有字符都是小写英文字母。
提示
枚举所有可能的子串,统计出现次数,找出符合条件的那个
AC代码:
1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 using namespace std; 5 struct chuan 6 { 7 char s[70]; 8 int sum; 9 int lens; 10 }ss[2000]; 11 bool cmp(chuan a,chuan b) 12 { 13 if(a.sum!=b.sum) 14 return a.sum>b.sum; 15 else 16 return a.lens>b.lens; 17 } 18 char sss[70]; 19 char now[70]; 20 int main() 21 { 22 int n; 23 int len; 24 int ok; 25 int i,j,k,l; 26 int num; 27 scanf("%d",&n); 28 getchar(); 29 scanf("%s",sss); 30 len=strlen(sss); 31 memset(ss,0,sizeof(ss)); 32 num=0; 33 while(n<=len) 34 { 35 for(i=0;i<len-n;i++) 36 { 37 for(j=i,k=0;j<i+n;j++,k++) 38 now[k]=sss[j]; 39 ok=1; 40 for(l=0;l<num;l++) 41 if(strcmp(now,ss[l].s)==0) 42 { 43 ok=0; 44 ss[l].sum++; 45 break; 46 } 47 if(ok==1) 48 { 49 strcpy(ss[num].s,now); 50 ss[num].sum++; 51 ss[num].lens=n; 52 num++; 53 } 54 memset(now,0,sizeof(now)); 55 } 56 n++; 57 } 58 sort(ss,ss+num,cmp); 59 for(i=0;i<n;i++) 60 printf("%c",ss[0].s[i]); 61 printf("\n"); 62 return 0; 63 }
悠游天地间 all rights reserved. © 2013 -- 1 << 64