首页 > 其他 > 详细

String HDU5672 尺取法

时间:2020-03-06 22:59:56      阅读:63      评论:0      收藏:0      [点我收藏+]

题目大意:给你字符串,和一个数字N。让你在它所有子串中找存在至少N个不同字母的子串,求出个数。

 1 #include<algorithm>
 2 #include<cstdio>
 3 #include<iostream>
 4 #include<queue>
 5 #include<vector>
 6 #include<map>
 7 #include<stack>
 8 #include<string>
 9 #include<cstring>
10 #define ll long long
11 using namespace std;
12 const int maxn = 1e6 + 10;
13 ll n,vis[maxn];
14 char str[maxn];
15 int main()
16 {
17     ll T;
18     scanf("%lld", &T);
19     while (T--)
20     {
21         memset(vis, 0, sizeof(vis));
22         scanf("%s", str);
23         scanf("%lld", &n);
24         ll l = 0, r = 0,len = strlen(str), k = 0, ans = 0;
25         while (l < len)
26         {
27             while (r < len && k < n)
28             {
29                 if (vis[str[r] - a] == 0)k++;
30                 vis[str[r] - a]++;
31                 r++;
32             }
33             if (k < n)             
34                 break;
35             ans += len - r + 1;
36             vis[str[l] - a]--;
37             if (vis[str[l] - a] == 0)k--;
38             l++;
39         }
40         printf("%lld\n", ans);
41     }
42 }

 

String HDU5672 尺取法

原文:https://www.cnblogs.com/CSA01/p/12431168.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!