滑动窗口要先确定,哪一个窗口固定(枚举哪个,哪一个固定),哪一个窗口滑动
一个是包含T的排列,一个是包含T所有字母,其实是一个意思,唯一的区别是,在子串中T的排列是连续的,在子串中T字母之间可以不连续
所有字母的实现,用一个unordered_map即可,也可以用数组
unordered_map<char,int> need,window;//need[c]表示T中需要几个字符c,window[c]表示,目前窗口中有几个字符c
int need[26];//need[0]表示字母a出现的次数,need[1]表示字母b出现的次数
对于包含所有字母,在缩小左窗口的时候,左窗口停止缩小的边界是: window中字符的种类数<need中的种类数了
对于包含排列,左右窗口是同时滑动的,窗口长度固定,是否停止滑动,只要need和window相同的时候就可以停止,说明找到了