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 次浏览

开启你的职业生涯

完成课程获得认证

开始
广告