n-gram串频统计 题解
题目
26:n-gram串频统计
总时间限制: 1000ms 内存限制: 65536kB
描述
在文本分析中常用到n-gram串频统计方法,即,统计相邻的n个单元(如单词、汉字、或者字符)在整个文本中出现的频率。假设有一个字符串,请以字符为单位,按n-gram方法统计每个长度为 n 的子串出现的频度,并输出最高频度以及频度最高的子串。所给的字符串只包含大小写字母,长度不多于500个字符,且 1 < n < 5。
如果有多个子串频度最高,则根据其在序列中第一次出现的次序依次输出,每行输出一个,如果最高频度不大于1,则输出NO。
输入
第一行为n;
第二行为字符串。
输出
输出最高频度以及频度最高的所有子串。若最高频度不大于1,只输出一行NO。
样例输入
3
abcdefabcd
样例输出
2
abc
bcd
提示
样例中,所有的3-gram是:abc,bcd,cde,def,efa,fab,abc,bcd。最后面的cd不足以形成3-gram,则不考虑。这样,abc 和 bcd 都出现了2次,其余的只出现了1次。
思路
思路也不难,仗着电脑运行速度快,数据范围小,用O(n2)的动作毫不为过。找到一个子串就逐一比对,统计个数。如果熟练使用map,还可以降成O(n log(n))。
代码
#include<iostream>
using namespace std;
int n,j,i,f<