FangLin Game Dev Engineer

LeetCode汇总记录

2023-07-25
FangLin

LeetCode-340 滑动窗口

参考链接:【LeetCode - 340】至多包含 K 个不同字符的最长子串

My Solution

int main()
{
  std::string s{ "ecebabb" };
  int k = 2;
  std::map<char, std::set<int>> contain;
  std::string result;
  int begin = 0;
  int end = 1;
  while (begin < s.size() && end <= s.size())
  {
    if (contain.find(s.at(end - 1)) == contain.end() && contain.size() == k)
    {
      contain.at(s.at(begin)).erase(begin);
      if (contain.at(s.at(begin)).size() == 0)
      {
        contain.erase(s.at(begin));
      }
      ++begin;
    }
    else
    {
      if (contain.find(s.at(end - 1)) == contain.end())
      {
        contain.emplace(s.at(end - 1), std::set<int>{end - 1});
      }
      else
      {
        contain[s.at(end - 1)].insert(end - 1);
      }
      if (contain.size() == k && end - begin > result.size())
      {
        result = s.substr(begin, end - begin);
      }
      ++end;
    }
  }
  return 0;
}

主要思想是使用状态记录的滑动窗口执行元操作

可以使用计算机进行元操作的情况,无需寻找宏观规律。计算机就是擅长解决重复性的简单任务。


Similar Posts

上一篇 C++之const相关

Comments