Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "pch.h"
- #include <iostream>
- #include <set>
- #include <map>
- #include <string>
- using namespace std;
- int main()
- {
- int i = 0, // стандартный счётчик
- l = 0; // счётчик возврата удалённого элемента subline
- string line, subline, minvalue; //изначальная строка и субстрока
- set<char> alph, curr_alph; //множество изначального алфавита и динамического
- map<char, int> am_alph; //алфавит с кол-вом включений
- cin >> line;
- int min = line.size() + 1;
- for (int i = 0; i < line.size(); i++) //заполнение алфавита
- if (alph.find(line[i]) == alph.end())
- alph.insert(line[i]);
- while (i != line.size())
- {
- while (curr_alph != alph) // передвижение правого указателя
- {
- subline += line[i];
- if (curr_alph.find(line[i]) == curr_alph.end())
- {
- curr_alph.insert(line[i]);
- am_alph.insert(pair<char, int>(line[i], 1));
- }
- else
- am_alph.find(line[i])->second++;
- i++;
- }
- if (subline.size() < min) //проверка
- {
- min = subline.size();
- minvalue = subline;
- }
- while (curr_alph == alph) //передвижение левого указателя
- {
- if (am_alph.find(subline[0])->second > 1)
- am_alph.find(subline[0])->second--;
- else
- {
- curr_alph.erase(curr_alph.find(subline[0]));
- am_alph.erase(am_alph.find(subline[0]));
- }
- subline.erase(0, 1);
- l++;
- }
- subline = line[l-1] + subline; //возврат последнего удалённого элемента
- if (subline.size() < min) //провека
- {
- min = subline.size();
- minvalue = subline;
- }
- }
- cout << minvalue << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement