计数减到 0 为何要删键
用 map<char, int> 记窗口里各字符的次数,某个字符减到 0 时应该 erase 掉这个键,因为【0】。
不删键会数出几种
字符串 abcabcbb,窗口长 3 一路滑到末尾。这个版本减到 0 也不删键。运行它: #include <algorithm> #include <iostream> #include <map> #
删了键之后呢
同样的滑动,这次减到 0 就 erase 掉。运行它: #include <algorithm> #include <iostream> #include <map> #include <strin
写一对 add 和 drop
补全 add_ch 和 drop_ch:drop_ch 减到 0 时要 erase 掉这个键。滑完之后输出窗口里有几种字符。 (本题用 g++ -std=c++17 -O0 编译。)
删键和不删键一次对比
补全 kinds_erase(用 add_ch / drop_ch 维护),再和不删键的 kinds_keep 一起跑,把两个种类数用 / 连起来输出(不删的在前)。 (本题用 g++ -std=c++17 -O0 编译。)
窗口里最多的字符出现几次
补全代码:窗口长 3 滑到末尾,输出最后那个窗口里出现最多的字符出现了几次。 (本题用 g++ -std=c++17 -O0 编译。)
三个字符都不同的窗口
窗口长 3 滑一遍,数出有几个窗口里三个字符互不相同。(互不相同等价于 cnt.size() == 3——所以 drop_ch 里那个 erase 在这里是决定性的。) (本题用 g++ -std=c++17 -O0 编译。)
看到双循环先问什么
想把一个双循环优化掉,先要问【0】。
优化完之后必须做的事
第 1 步:同一组数据,两种做法 第 2 步:暴力:所有子段都试一遍 第 3 步:窗口:两端各走一趟 第 4 步:答案对上了才算优化成功 答案 步数 暴力 窗口 3 28 3 14 把暴力法优化成 O(n) 之后,必须做的是【0】。
三个结果都对得上吗
运行下面这段程序: #include <algorithm> #include <iostream> #include <map> #include <string> #include <