1456 定长子串中元音的最大数目
采用滑动窗口。每次移动一个位置,判断当前窗口内的子串内目标元素的个数,若比之前更大就更新结果。
如何判断是否更新结果?也即,如何判断当前窗口内所含目标元素个数,是否为遍历到这个窗口为止的最大值?
对于下图的字符串 abci,假如我们已经计算出了子串 abc 的元音个数,那么从子串 abc 到子串 bci,只需要考虑移除(离开窗口)的字母 a 是不是元音,以及添加(进入窗口)的字母 i 是不是元音即可,因为中间的字母 b 和 c 都在这两个子串中。
无非就这几种情况:
- a 是,i 不是,则下一个窗口内的子串必不符合
- a 是,b 也是,则下一个窗口内的子串必不符合(与当前最高记录个数相同)
- a 不是,i是,则下一个窗口内的串必然刷新答案
- a不是,i 不是,则下一个窗口内的子串必不符合(与当前最高记录个数相同)