C++ 求长度为 K 的重复字符子串的数量
//时间复杂度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; }