給你一個字符串 s ,它只包含三種字符 a, b 和 c 。
請你返回 a,b 和 c 都 至少 出現過一次的子字符串數目。
示例 1:
輸入:s = "abcabc"
輸出:10
解釋:包含 a,b 和 c 各至少一次的子字符串爲 "abc", "abca", "abcab", "abcabc", "bca", "bcab", "bcabc", "cab", "cabc" 和 "abc" (相同字符串算多次)。
示例 2:
輸入:s = "aaacb"
輸出:3
解釋:包含 a,b 和 c 各至少一次的子字符串爲 "aaacb", "aacb" 和 "acb" 。
示例 3:
輸入:s = "abc"
輸出:1
提示:
3 <= s.length <= 5 x 10^4
s 只包含字符 a,b 和 c 。
class Solution {
public:
int numberOfSubstrings(string s) {
int n[3]={-1,-1,-1};
for(int i=0;i<s.length();i++)
{
for(int j=0;j<3;j++)if(s[i]-'a'==j)n[j]=i;
if(n[0]>-1 && n[1]>-1 && n[2]>-1)break;
}
int ans=0;
for(unsigned int i=max(n[0],max(n[1],n[2]));i<s.length();i++)
{
for(int j=0;j<3;j++)if(s[i]-'a'==j)n[j]=i;
ans+=min(n[0],min(n[1],n[2]))+1;
}
return ans;
}
};