[SMOJ1813]不同子串个数

题目描述

给定一个包含大小写字母的字符串和当中可能出现的不同字符数 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,并将该值标记。
这种做法的时间复杂度应该是 O((lenn+1)×n)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值