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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP