Loading...
Submission
# When Author Problem Language CPU Memory
6991 2023-02-26 21:50:22 stc_oyp_u_249 Min Substring C++ 17 23 ms 3704 kb Accepted
Test Cases
# CPU Memory Points
1 3 ms 3556 kb 1 Accepted
2 3 ms 3316 kb 1 Accepted
3 3 ms 3476 kb 1 Accepted
4 3 ms 3404 kb 1 Accepted
5 3 ms 3528 kb 1 Accepted
6 3 ms 3412 kb 1 Accepted
7 3 ms 3400 kb 1 Accepted
8 3 ms 3520 kb 1 Accepted
9 3 ms 3464 kb 1 Accepted
10 20 ms 3616 kb 1 Accepted
11 21 ms 3612 kb 1 Accepted
12 13 ms 3528 kb 1 Accepted
13 22 ms 3532 kb 1 Accepted
14 18 ms 3544 kb 1 Accepted
15 17 ms 3532 kb 1 Accepted
16 23 ms 3704 kb 1 Accepted
17 20 ms 3552 kb 1 Accepted
18 23 ms 3452 kb 1 Accepted
Source Code
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define int long long int
  4.  
  5. signed main(){
  6. ios_base::sync_with_stdio(false);
  7. cin.tie(nullptr);
  8. string s;
  9. cin >> s;
  10. int n = (int) s.size(), l = 1, r = n - 1, ans = n;
  11. vector<int> vis(27, 0);
  12. int need = 0;
  13. for(auto x : s){
  14. if(vis[x - 'a'] == 0){
  15. need += 1;
  16. }
  17. vis[x - 'a'] += 1;
  18. }
  19. auto possible = [&](int x){
  20. for(int i = 0; i < 27; i++){
  21. vis[i] = 0;
  22. }
  23. int cnt = 0;
  24. for(int i = 0; i < x; i++){
  25. if(vis[s[i] - 'a'] == 0){
  26. cnt += 1;
  27. }
  28. vis[s[i] - 'a'] += 1;
  29. }
  30. if(cnt == need)return true;
  31. int pt = x;
  32. while (pt < n){
  33. if(vis[(s[pt] - 'a')] == 0){
  34. cnt += 1;
  35. }
  36. vis[(s[pt] - 'a')] += 1;
  37. vis[(s[(pt - x)] - 'a')] -= 1;
  38. if(vis[(s[(pt - x)] - 'a')] == 0){
  39. cnt -= 1;
  40. }
  41. pt += 1;
  42. if(cnt == need) return true;
  43. }
  44. return cnt == need;
  45. };
  46. while (l <= r){
  47. int m = (l + r) >> 1;
  48. if(possible(m)){
  49. ans = min(ans, m);
  50. r = m - 1;
  51. }else l = m + 1;
  52. }
  53. cout << ans << '\n';
  54. return 0;
  55. }