题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=5672

题意:

有一个10≤长度≤1,000,000的字符串,仅由小写字母构成。求有多少个子串,包含有至少k(1≤k≤26)个不同的字母?

分析:

很典型的尺取法。

不断依次移动区间的头尾,使区间满足条件,并找到这样的区间个数。

注意说的是包含至少k个,所以只要找到正好包含k个的区间,然后加上包含后面的串的个数就好了。

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn = 1e6 + 5;
char s[maxn];
int c[26 + 5];
int main (void)
{
int T;scanf("%d", &T);
while(T--){
scanf("%s", s);
int k;scanf("%d", &k);
int len = strlen(s);
int l = 0, r = 0;
int cnt = 0;
long long ans = 0;
memset(c, 0, sizeof(c));
while(l <= r && l < len){
while(cnt < k && r <len){
c[s[r] -'a']++;
if(c[s[r]-'a'] == 1) cnt++;
r++;
}
if(cnt == k) ans += len - r + 1;
if(c[s[l]-'a'] == 1) cnt--;
c[s[l]-'a']--;
l++;
}
printf("%I64d\n", ans);
}
}

最新文章

  1. [NHibernate]存储过程的使用(三)
  2. 好用的SQL TVP~~独家赠送[增-删-改-查]的例子
  3. Winform开发框架之统计图表的实现
  4. C#如何使用异步编程
  5. 检测网页是否可以打开, 再使用IE打开网页
  6. APC -- Asynchronous Procedure Call 异步过程调用
  7. HDU5301
  8. Qml 写的弹出层控件(13篇博客)
  9. EditText 限制输入整数和小数 的位数
  10. 从蓝光到4K,腾讯视频高码率下载背后的技术
  11. mysql进阶(十六)常见问题汇总
  12. 【20190405】JavaScript-整理一些常用正则式
  13. c# 多线程委托传参方式
  14. C#获取某一路径下的所有文件名信息(包括子文件夹)
  15. RSA 分段加解密【解决“不正确的长度”的异常】
  16. OS与Internet
  17. leetcode 22括号生成
  18. topcoder srm 430 div1
  19. 《DSP using MATLAB》Problem 5.8
  20. [解决思路]ORA-01078: failure in processing system parameters LRM-00109: could not open parameter file

热门文章

  1. TZ_16_Vue父子组件之间的通信
  2. Vim 日常操作
  3. 树形结构的数据渲染(element-ui&amp;VUE)
  4. WebSocket前后端实现
  5. oracle习题集-高级查询2
  6. 【P1203】 【USACO1.1】坏掉的项链Broken Necklace
  7. 阿里云数据管理DMS企业版发布年度重大更新 多项功能全面升级
  8. Codeforces 113B
  9. 如何在CentOS 7 / Fedora 31/30/29上安装ELK Stack
  10. java贪吃蛇小游戏详解