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
广告