Guest User

Untitled

a guest
May 17th, 2020
244
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.74 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef std::pair<int, int> ipair;
  4. #define int long long
  5. #define pb push_back
  6. #define ff first
  7. #define INF INT_MAX
  8. #define ss second
  9. #define fr(i, j, a) for (int i = j; i < a; i++)
  10. #define cnt_ones(x) __builtin_popcount(x)
  11. #define all(x) x.begin(), x.end()
  12. #define sz size()
  13. #define endl "\n"
  14. #define vi vector<int>
  15. #define vvi vector<vector<int>>
  16. #define vp vector<ipair>
  17. #define mp make_pair
  18. #define mod 1000000007
  19. #define IOS                                                                    \
  20.   std::ios::sync_with_stdio(false);                                            \
  21.   cin.tie(NULL);                                                               \
  22.   cout.tie(NULL);
  23. string minWindow(string s, string t) {
  24.   int m = s.size(), n = t.size();
  25.   if (m == 0 or n == 0)
  26.     return "";
  27.   string ans = "";
  28.   int start_index = -1, start = 0, window = INT_MAX;
  29.   map<char, int> mp;
  30.   map<char, int> pm;
  31.   for (int i = 0; i < n; i++)
  32.     mp[t[i]]++;
  33.   int cnt = 0;
  34.   for (int i = 0; i < m; i++) {
  35.     pm[s[i]]++;
  36.     if (pm[s[i]] <= mp[s[i]] and mp[s[i]] != 0)
  37.       cnt++;
  38.     if (cnt == n) {
  39.       while (pm[s[start]] > mp[s[start]] or mp[s[start]] == 0) {
  40.         if (pm[s[start]] > mp[s[start]]) {
  41.           pm[s[start]]--;
  42.           start++;
  43.         }
  44.       }
  45.       int win = i - start + 1;
  46.       if (win < window) {
  47.         window = win;
  48.         start_index = start;
  49.       }
  50.     }
  51.   }
  52.   if (start_index == -1)
  53.     return "";
  54.   return s.substr(start_index, window);
  55. }
  56. void init() {
  57.   int T;
  58.   cin >> T;
  59.   while (T--) {
  60.       string s;cin>>s;
  61.       string ans = minWindow(s,"123");
  62.       cout<<ans.size()<<endl;
  63.   }
  64. }
  65. int32_t main() {
  66.   IOS;
  67.   init();
  68.   return 0;
  69. }
Add Comment
Please, Sign In to add comment