题目描述
给定一个包含大小写字母的字符串和当中可能出现的不同字符数 NC ,求该字符串中长度为 N 的不同子串个数。
例如,考虑N=3,NC=4 和字符串“daababac”。在串中可以找到的大小为 3 的不同子字符串是:“daa”; “aab”; “aba” “bab” “bac”。
所以答案应该是 5。
输入格式 1813.in
第一行输入由两个数字 N 和
NC 组成,分隔一个空格。之后是一行字符串,长度不超过1600万。
输出格式 1813.out
输出一个在给定字符串中找到的长度为 N 的不同子串个数。
输入样例 1813.in
3 4
daababac
输出样例 1813.out
5
提示
输入量较大,C++选手建议使用scanf。
考虑到数据范围是比较大的,假设我们要枚举每个子串,然后逐位编码,得到一个 hash 值,如果该值曾经出现过就不计数,否则答案加 1,并将该值标记。
这种做法的时间复杂度应该是