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

更新於:2020年4月29日

591 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始
廣告