1 #include <cstdio>
 2 #include <cstring>
 3 using namespace std;
 4
 5 char s[1000010];
 6 int vis[300];
 7 int main()
 8 {
 9     int tt,k,ss,t;  //ss 表示低的指针 t代表高的指针
10     scanf("%d",&tt);
11     while(tt--)
12     {
13         scanf("%s",s);
14         scanf("%d",&k);
15         ss=0;t=0;
16         long long sum=0;
17         int num=0;
18         int len=strlen(s);
19         memset(vis,0,sizeof(vis));
20         for(;;)
21         {
22             while(t<len&&num<k)
23             {
24                 if(!vis[s[t]])
25                 {
26                     vis[s[t]]++;
27                     num++;
28                 }
29                 else
30                     vis[s[t]]++;
31                 if(num>=k)      //如果子串不同字符大于k的退出
32                     break;
33                 t++;
34             }
35             if(num<k)       //退出后一种是大于不同字符退出,一种是到了最后len的时候退出,如第二种,则结束。
36                 break;
37             sum+=len-t;
38             vis[s[ss]]--;
39             if(!vis[s[ss]])
40             {
41                 t++;
42                 num--;
43             }
44             ss++;       //没找到一处,就使低指针加1;
45         }
46         printf("%lld\n",sum);
47     }
48     return 0;
49 }
50
51         

View Code

有一个明显的性质:如果子串(i,j)包含了至少k个不同的字符,那么子串(i,k),(j<k<length)也包含了至少kkk个不同字符。

因此对于每一个左边界,只要找到最小的满足条件的右边界,就能在O(1)O(1)O(1)时间内统计完所有以这个左边界开始的符合条件的子串。

寻找这个右边界,是经典的追赶法(尺取法,双指针法)问题。维护两个指针(数组下标),轮流更新左右边界,同时累加答案即可。复杂度 O(length(S))

转载于:https://www.cnblogs.com/WDKER/p/5446650.html

String 尺取法相关推荐

  1. Vasya and String CodeForces - 676C(尺取法)

    High school student Vasya got a string of length n as a birthday present. This string consists of le ...

  2. 【HDU - 5672】String(尺取法)

    题干: There is a string SS.SS only contain lower case English character.(10≤length(S)≤1,000,000)(10≤le ...

  3. 【常用技巧精选】尺取法

    整理的算法模板合集: ACM模板 目录 1.反向扫描 1 找指定和的整数对 A.UVA1121 Subsequence B.POJ 3320 Jessica's Reading Problem C.l ...

  4. ACM—各种模拟 总结(字符串,尺取法,数学问题)习题汇总

    目录 一.字符串模拟 二. 高精度计算 1. 回文数(高精度,进制转换) 三.数学问题模拟 四.尺取法(双指针法) 1.都说小镇的切糕贵 (尺取法,字符串) umi和弓道 五.奇怪的模拟 x的位数=l ...

  5. poj_2739 尺取法

    题目大意 给定一个数字N,N可能由1个或多个连续的素数求和得到,比如41 = 2+3+5+7+11+13, 41 = 11+13+17, 41 = 41.求出对于N,所有可能的组合形式. 题目分析 先 ...

  6. poj2566Bound Found尺取法进阶(java)

    题目链接: 这个尺取法的思想挺好的,如果第一次做尺取法题,不妨看下尺取法入门题. 题目大意: 多组测试数据(0,0)截止. 每组数据输入 n,k(n数字个数,k询问次数) 下一行n个数表示序列. 接下 ...

  7. poj3320Jessica's Reading Problem—尺取法(java)

    题目链接 大意:给序列数字,找出最小子序列,包含所有的元素类型.例如 5 1 8 8 8 1 输出2,因为1 8就包含了所有元素 思路:尺取法 这个和裸的尺取优点不同的是,他需要一个map来维护判断而 ...

  8. poj3061尺取法/前缀和 二分(java)

    今天遇到这题因为以前没见到过,当时就是想着应该有着一个很简单的方法可以过但是奈何就是没思路.后来看了别人思路写了下来.学习了尺取法 poj3061 题目介绍: Description A sequen ...

  9. B. Complete the Word (尺取法)

    题目链接:http://codeforces.com/problemset/problem/716/B 题目大意:字符串中的 '?' 可以用A->Z任何一个来替换 问能不能通过替换使字符串有一个 ...

  10. 51nod 1127 最短的包含字符串(尺取法)

    题目: 简单尺取法 代码: #include <iostream> #include <algorithm> #include <map> #include < ...

最新文章

  1. java 运算符_java 运算符
  2. selector + drawable 多状态图形
  3. 奇怪,不能上GOOGLE了...你们也是这样吗?
  4. 让机器学会看图说话:Image Caption任务最新综述
  5. [ios开发基础之]代码块
  6. system 无法以 sysdba 登录,提示:权限不足。
  7. python根据文件名打标签_使用python将图片按标签分入不同文件夹的方法
  8. 团队软件库_深情软件库App最新版下载_深情软件库手机版2021下载
  9. 使用XUtils进行文件的断点下载
  10. cmd静默运行_exe、msi、dos、bat等静默运行,后台运行,不弹窗的解决办法
  11. OneNote | 插件/使用技巧
  12. 408计算机考研2012真题解析,2018年计算机408统考考研真题及答案解析.pdf
  13. 兽药促销发展分析及新策略谈
  14. 计算机单片机考试作弊检讨书,考试作弊检讨书(精选5篇)
  15. 华硕BIOS TPM设置
  16. IvParameterSpec 干什么用的
  17. PhotoShop CS4快捷键大全
  18. 计算机音乐的感想,音乐教师工作心得体会(精选7篇)
  19. 工具类App的下一个风口:今天,我们聊一聊颜值经济这回事
  20. javascript实用例子

热门文章

  1. python生成器的惰性计算
  2. asp.net core 支付宝支付( 电脑2.0)
  3. JAVA多线程之synchronized和volatile实例讲解
  4. TP框架设置的LOG_LEVEL不起作用
  5. JavaScript 调用 Web Service 的多种方法
  6. [好惆怅啊]TCL编码转换的问题
  7. WebSocket,不再“轮询”
  8. 免费赠送2本新书《iOS程序员面试笔试真题与解析》
  9. 前端精英你是什么样的呢
  10. mysql 8.0 ~ innodb与变量优化