A general method for substring problems

Given a binary string of length N and an integer K, we need to find out how many substrings of this string are exist which contains exactly K ones.
Examples:
Input : s = “10010”
K = 1
Output : 9
The 9 substrings containing one 1 are,
“1”, “10”, “100”, “001”, “01”, “1”,
“10”, “0010” and “010”

static int countOfSubstringWithKOnes( 
                            String s, int K) 
    { 
        int N = s.length(); 
        int res = 0; 
        int countOfOne = 0; 
        int []freq = new int[N+1]; 

        freq[0] = 1; 

        for (int i = 0; i < N; i++) { 
            countOfOne += (s.charAt(i) - '0'); 
            if (countOfOne >= K) { 
                res += freq[countOfOne - K]; 
            } 
            freq[countOfOne]++; 
        }   
        return res; 
    } 

注意:求子串的時(shí)候,尤其是涉及長(zhǎng)度,子串里面元素個(gè)數(shù)之類的問(wèn)題,可以用類似于動(dòng)態(tài)規(guī)劃的方法,用當(dāng)前遍歷的值減去之前的值,來(lái)找子串,實(shí)現(xiàn)復(fù)雜度O(n)。
相似的問(wèn)題:https://www.geeksforgeeks.org/longest-substring-with-count-of-1s-more-than-0s/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容