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