Advertisement
Guest User

Untitled

a guest
Feb 20th, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.79 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement