C++ 求長度為 K 的重複字元子串的數量
阿新 • • 發佈:2021-11-13
//時間複雜度O(n),空間複雜度O(1) int numKLenSubstrRepeats(string s, int k) { char reChar = 0;//當前重複字元 int num = 0;//滿足要求的子串數量 vector<short> inQueue(26, 0);//在佇列中各字元的數量 //掃描 for (size_t i = 0; i < s.size(); ++i) { if (inQueue[s[i] - 'a'] && reChar != s[i])//更新當前重複字元 { reChar = s[i]; } ++inQueue[s[i] - 'a']; if (reChar != 0 && inQueue[reChar - 'a'])//判斷是否存在重複字元 { if (i >= k - 1) ++num; } if (i >= k - 1)//佇列的容量為k,只有滿了才會退隊 {--inQueue[s[i - k + 1] - 'a'];//佇列尾部字元退隊 if (s[i - k + 1] == reChar && inQueue[reChar - 'a'] == 1)//判斷reChar是否還重複 { reChar = 0; } } } return num; }