HDU 5672 String
来源:互联网 发布:中国儿童编程网 编辑:程序博客网 时间:2024/05/22 17:20
String
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1977 Accepted Submission(s): 638
Problem Description
There is a string S .S only contain lower case English character.(10≤length(S)≤1,000,000)
How many substrings there are that contain at leastk(1≤k≤26) distinct characters?
How many substrings there are that contain at least
Input
There are multiple test cases. The first line of input contains an integer T(1≤T≤10) indicating the number of test cases. For each test case:
The first line contains stringS .
The second line contains a integerk(1≤k≤26) .
The first line contains string
The second line contains a integer
Output
For each test case, output the number of substrings that contain at least k dictinct characters.
Sample Input
2abcabcabca4abcabcabcabc3
Sample Output
055
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5672
题意:给定一个字符串和一个k,统计有多少个连续区间内不同字符数大于等于k。
解题思路:尺取法,如果下标s——t(t为第一个从s出发满足条件的下标)满足条件,那么t往后的下标都满足,再将左区间往后挪一,继续判断。
AC代码:
#include<cstdio>#include<cstring>#include<map>#include<algorithm>using namespace std;const int LEN = 1000000 + 10;//输入字符串的最长长度 int k;char str[LEN];void solve(){int s,t;int num;//统计查找区间不同字符的个数 long long cnt;//定义为long long型,因为字符串长度有1000000 int n;n=strlen(str);//字符串的长度 s=0,t=0;num=0,cnt=0;map<char,int> count;//声明map用来记录每个字符出现的次数 for(;;)//核心算法 ,尺取法{while(t<n&&num<k)//当下标小于字符穿长度,且区间中不同字符数小于k时循环 {if(count[str[t++]]++==0)//出现新字符 {num++;}}if(num<k) break;//当查找区间内不同字符数小于k也即t到达字符串末尾时跳出循环 cnt+=n+1-t;//更新cnt,下标t满足条件,那么t往后的都满足 if(--count[str[s]]==0) num--;//判断左区间字符出现的次数 s++;//将左区间往后挪一}printf("%lld\n",cnt);}int main(void){int T;//测试组数 scanf("%d",&T);while(T--){getchar();scanf("%s%d",str,&k);solve();}return 0;}
阅读全文
0 0
- hdu 5672 String
- HDU 5672:String【模拟】
- HDU 5672 String
- hdu 5672 String
- HDU 5672 String
- string string string HDU
- hdu 5672 String(尺取)
- HDU 5672 String【尺取法】
- hdu 5672 String【尺取法】
- HDU 5672 String (尺取法)
- HDU 5672 String(尺取法)
- hdu 5672 String (尺取法)
- String HDU
- HDU 6194 string string string
- HDU 6194 string string string
- HDU 6194 string string string
- HDU 6194 string string string
- HDU 6194string string string
- ArrayList循环遍历并删除元素的常见陷阱
- 1分钟搭建完整laravel后台
- C语言通讯录(利用链表实现)
- 关于static关键字的一些学习
- java并发编程条件队列的唤醒机制探究
- HDU 5672 String
- day5模块学习--hashlib模块
- MpAndroidChart绘制折线图及标志线
- HTTP 请求方式: GET和POST的比较
- C++ Windows Server 2016用CMD命令行安装IIS角色和功能组件
- 3.13—字符串—Anagrams
- Java 集合系列02之 Collection架构
- Liunx 常用命令(一)
- Unicode中文和特殊字符的编码范围