我写的:超时
class Solution {
public:
int numberOfSubstrings(string s) {
int res = 0;
for(int i = 0; i < s.size();i++)
{
bool flag[3] = {0};
for(int j = i; j < s.size(); j++)
{
if(s[j] == 'a')flag[0] = true;
else if(s[j] == 'b')flag[1] = true;
else if(s[j] == 'c')flag[2] = true;
if(flag[0] && flag[1] && flag[2])
{
res += s.size() - j;
break;
}
}
}
return res;
}
};
看了第一名的之后:
https://leetcode-cn.com/contest/biweekly-contest-20/ranking/
class Solution {
public:
int numberOfSubstrings(string s) {
int res = 0;
int cnt[5] = {0};
int right = 0;
for(int i = 0; i < s.size();i++)
{
while((cnt[0] == 0 || cnt[1] == 0 || cnt[2] == 0) && right < s.size())
{
cnt[s[right++] - 'a']++;
}
if(cnt[0] > 0 && cnt[1] > 0 && cnt[2] > 0)
{
res += s.size() - right+1;
}
cnt[s[i]-'a']--;
}
return res;
}
};