码迷,mamicode.com
首页 > 其他好文 > 详细

我全都要

时间:2020-03-06 22:01:00      阅读:53      评论:0      收藏:0      [点我收藏+]

标签:mes   c++   sync   r++   题意   namespace   efi   return   continue   

# 题意
给定一个字符串,要求在整个字符串出现过的字母在选取的区间中都出现至少K次,求最短区间有多短

# 题解
因为是最短区间所以用第一个出现的二分板
二分区间的长度
两个check
一个判断当前长度当前位置记录中整个字符串中出现的字符是否已经出现k次
一个check当前长度的区间是否满足条件

 1 #include <bits/stdc++.h>
 2 #define ll long long
 3 using namespace std;
 4 const int N=1e5+10;
 5 string str;
 6 int n,k;
 7 unordered_map<char,int>rec,ans;
 8 bool judge(){
 9    for(int i=a;i<=z;i++){
10       int c=(char)i;
11       if(!rec[c]) continue;
12       if(ans[c]<k) return 0;
13    }
14    return 1;
15 }
16 bool check(int len){
17    ans.clear();
18    int l=0,r=len-1;
19    for(int i = l; i <= r; i++)
20       ans[str[i]]++;
21    while(r<n){
22       if(judge())
23          return true;
24       ans[str[l]]--;
25       l++;
26       r++;
27       if(r<n)
28        ans[str[r]]++;
29    }
30    return false;
31 }
32 
33 int main(){
34    ios::sync_with_stdio(0);
35    cin.tie(0);
36    cout.tie(0);
37    int t;
38    cin >> t;
39    while(t--){
40       rec.clear();
41       cin>>n>>k;
42       cin>>str;
43       if(!k) {
44          cout << "0" << endl;
45          continue;
46       }
47       for(int i = 0; i < n; i++){
48          rec[str[i]]++;
49       }
50       bool flag=1;
51       for(int i=a;i<=z;i++) {
52          int c=(char)i;
53          if (rec[c]>0 && rec[c]<k){
54             flag=0;
55             break;
56          }
57       }
58       if(flag) {
59          int l = 1, r = n;
60          while (l < r) {
61             int mid = l + r >> 1;
62             if (check(mid)) {
63                r=mid;
64             } else
65                l=mid+1;
66          }
67          cout<<l<<endl;
68       }
69       else
70          cout<<"-1"<<endl;
71    }
72 }

 

 

我全都要

标签:mes   c++   sync   r++   题意   namespace   efi   return   continue   

原文地址:https://www.cnblogs.com/hhyx/p/12430967.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!