字串统计 kmp算法
来源:互联网 发布:js trigger 参数 编辑:程序博客网 时间:2024/04/28 05:26
问题描述
给定一个长度为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中所有字符都是小写英文字母。
#include<stdio.h>#include<string.h>int next[100];void setnext(char str1[]){int i,j,k;int n;memset(next,0,sizeof(next));n=strlen(str1);i=0,j=-1;next[0]=-1;for(;i<n;){if(j==-1||str1[i]==str1[j]){i++;j++;if(str1[i]!=str1[j]){next[i]=j;} elsenext[i]=next[j];}elsej=next[j];}}int Kmp(char str1[],char str[]){setnext(str1);int len,len1;int i,j,k;i=0,j=0;int sum=0;len=strlen(str);len1=strlen(str1);for(;i<len;){if(j==-1||str[i]==str1[j]){i++;j++;}elsej=next[j];if(j==len1)sum++;}return sum;}int main(){int n;while(~scanf("%d",&n)){int i,j,k,l=0;int m;char str[100];char str1[100];getchar();gets(str);m=strlen(str);char s[100];int max=0,num;for(;n<m;n++){for(i=0;i<=m-n;i++){k=0;for(j=0;j<n;j++){str1[k++]=str[i+j];}l++;str1[k]='\0';num=Kmp(str1,str);if(num>max){max=num;strcpy(s,str1);}else if(num==max){if(strlen(s)<strlen(str1))strcpy(s,str1);}}}printf("%s\n",s);}return 0;}
0 0
- 字串统计 kmp算法
- KMP查找字串算法
- 算法训练 字串统计
- 算法训练 字串统计
- 算法训练 字串统计
- 算法训练 字串统计
- 算法训练 字串统计
- 算法训练 字串统计
- 算法训练 字串统计
- 算法训练 字串统计
- 算法训练 字串统计
- 算法训练 字串统计
- 算法训练 字串统计
- 算法训练 字串统计
- 算法训练 字串统计
- 字串查找算法-KMP算法
- 蓝桥杯 算法训练 字串统计
- 蓝桥杯 算法训练 字串统计
- java中volatile关键字的含义
- Xcode6.0以上快捷键
- android中的进程与线程的理解
- Java Iterator(迭代器)
- 数据结构常用算法实现
- 字串统计 kmp算法
- C++:公有继承
- a different object with the same identifier value was already associated with the session
- hdu 3976 Electric resistance (高斯消元)
- mysql索引
- 2015/3/18上海找工作
- Codeforces Round #296 (Div. 1) A,B题解
- 从封装性来分析vb.net和C#两兄弟的差异
- ios cookie 登陆的实现