█████████ ████ ███░░░░░███ ░░███ ███ ░░░ ██████ ███████ ██████ ██████ ░███ ███░░███ ███░░███ ███░░███ ███░░███ ░███ ░███ ░███░███ ░███ ░███████ ░███ ░███ ░░███ ███░███ ░███░███ ░███ ░███░░░ ░███ ░███ ░░█████████ ░░██████ ░░████████░░██████ ░░██████ ░░░░░░░░░ ░░░░░░ ░░░░░░░░ ░░░░░░ ░░░░░░

Envío 2187

Problema 0xc9 - Substring más corta con mínimo K caracteres diferentes

Caso # Resultado Tiempo Memoria
#1
Correcto
0.007 s 1 KBi
#2
Correcto
0.006 s 1 KBi
#3
Correcto
0.007 s 1 KBi
#4
Correcto
0.007 s 1 KBi
#5
Correcto
0.007 s 1 KBi
#6
Correcto
0.007 s 1 KBi
#7
Correcto
0.008 s 1 KBi
#8
Correcto
0.006 s 1 KBi
#9
Correcto
0.006 s 1 KBi
#10
Correcto
0.09 s 1 KBi
#11
Correcto
0.024 s 1 KBi
#12
Correcto
0.08 s 1 KBi
#13
Correcto
0.02 s 2 KBi
#14
Correcto
0.098 s 1 KBi
#15
Correcto
0.096 s 1 KBi
#16
Correcto
0.023 s 1 KBi
#17
Correcto
0.091 s 2 KBi
#18
Correcto
0.078 s 1 KBi
#19
Correcto
0.069 s 1 KBi
#20
Correcto
0.023 s 1 KBi
#21
Correcto
0.069 s 1 KBi
#22
Correcto
0.05 s 1 KBi
#23
Correcto
0.047 s 1 KBi
#24
Correcto
0.052 s 1 KBi
#25
Correcto
0.055 s 2 KBi
#26
Correcto
0.048 s 1 KBi
#27
Correcto
0.053 s 2 KBi
#28
Correcto
0.046 s 1 KBi
#29
Correcto
0.064 s 1 KBi
#30
Correcto
0.023 s 1 KBi
#31
Correcto
0.036 s 1 KBi
#32
Correcto
0.033 s 1 KBi
Puntos totales: 100 / 100

Código

#include <bits/stdc++.h>
using namespace std;

int main() {
  string s;
  cin >> s;
  int k;
  cin >> k;

  int start = 0;
  unordered_map<int, int> m;
  int min_size = INT_MAX;
  for (int i = 0; i < s.size(); i++) {
    char c = s[i];
    m[c]++;
    if (m.size() == k) {
      min_size = min(min_size, i - start + 1);
      while (m.size() == k) {
        char st = s[start++];
        m[st]--;
        if (m[st] == 0) {
          m.erase(st);
        } else {
          min_size = min(min_size, i - start + 1);
        }
      }
    }
  }
  if (min_size == INT_MAX)
    cout << -1 << endl;
  else
    cout << min_size << endl;
}