daily pastebin goal
35%
SHARE
TWEET

Untitled

a guest Feb 20th, 2019 63 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "pch.h"
  2. #include <iostream>
  3. #include <set>
  4. #include <map>
  5. #include <string>
  6.  
  7. using namespace std;
  8.  
  9. int main()
  10. {
  11.     int i = 0, // стандартный счётчик
  12.         l = 0; // счётчик возврата удалённого элемента subline
  13.  
  14.     string line, subline, minvalue; //изначальная строка и субстрока
  15.     set<char> alph, curr_alph; //множество изначального алфавита и динамического
  16.     map<char, int> am_alph; //алфавит с кол-вом включений
  17.  
  18.     cin >> line;
  19.     int min = line.size() + 1;
  20.  
  21.     for (int i = 0; i < line.size(); i++) //заполнение алфавита
  22.         if (alph.find(line[i]) == alph.end())
  23.             alph.insert(line[i]);
  24.  
  25.     while (i != line.size())
  26.     {
  27.         while (curr_alph != alph) // передвижение правого указателя
  28.         {
  29.             subline += line[i];
  30.             if (curr_alph.find(line[i]) == curr_alph.end())
  31.             {
  32.                 curr_alph.insert(line[i]);
  33.                 am_alph.insert(pair<char, int>(line[i], 1));
  34.             }
  35.             else
  36.                 am_alph.find(line[i])->second++;
  37.             i++;
  38.         }
  39.  
  40.         if (subline.size() < min) //проверка
  41.         {
  42.             min = subline.size();
  43.             minvalue = subline;
  44.         }
  45.  
  46.         while (curr_alph == alph) //передвижение левого указателя
  47.         {
  48.             if (am_alph.find(subline[0])->second > 1)
  49.                 am_alph.find(subline[0])->second--;
  50.             else
  51.             {
  52.                 curr_alph.erase(curr_alph.find(subline[0]));
  53.                 am_alph.erase(am_alph.find(subline[0]));
  54.             }
  55.             subline.erase(0, 1);
  56.             l++;
  57.         }
  58.  
  59.         subline = line[l-1] + subline; //возврат последнего удалённого элемента
  60.  
  61.         if (subline.size() < min) //провека
  62.         {
  63.             min = subline.size();
  64.             minvalue = subline;
  65.         }
  66.     }
  67.  
  68.     cout << minvalue << endl;
  69. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top