力扣OJ 1358. 包含所有三種字符的子字符串數目

給你一個字符串 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;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章