C++中包含所有三個字元的子字串數量
假設我們給定一個字串s,它只包含字元a、b和c。我們必須返回包含這些字元a、b和c至少一次出現的子字串的數量。例如,如果字串是“abcabc”,則輸出將是10,因為包含字元a、b和c至少一次出現的子字串是“abc”、“abca”、“abcab”、“abcabc”、“bca”、“bcab”、“cab”、“cabc”和“abc”(最後部分再次出現)。
為了解決這個問題,我們將遵循以下步驟:
ret := 0,建立一個名為m的對映,設定j := 0
對於i從0到s的大小
在對映m中增加s[i]的計數
當m['a'] > 0且m['b'] > 0且m['c'] > 0時,
減少對映m中s[i]的計數
將j增加1
將ret增加j
返回ret
示例(C++)
讓我們看看下面的實現,以便更好地理解:
#include <bits/stdc++.h> using namespace std; class Solution { public: int numberOfSubstrings(string s) { int ret = 0; map <char, int> m; int j = 0; for(int i = 0; i < s.size(); i++){ m[s[i]]++; while(m['a'] > 0 && m['b'] > 0 && m['c'] > 0){ m[s[j]]--; j++; } ret += j; } return ret; } }; main(){ Solution ob; cout << (ob.numberOfSubstrings("abcabc")); }
輸入
"abcabc"
輸出
10
廣告