1. 程式人生 > 其它 >C++ 求長度為 K 的重複字元子串的數量

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; }