力扣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 。

代码:

cpp 复制代码
class Solution {
public:
    int numberOfSubstrings(string s) {
        int ans = 0, left = 0;
        int cnt[3]{};
        for (char c : s) {
            cnt[c - 'a']++;
            while (cnt[0] && cnt[1] && cnt[2]) {
                cnt[s[left] - 'a']--;
                left++;
            }
            ans += left;
        }
        return ans;
    }
};

解题思路:

(1)首先,滑动右边,直到满足条件。

(2)其次,左边 left++,直到不满足条件。

(3)加上 left。

相关推荐
左灯右行的爱情2 小时前
Redis数据结构总结-listPack
数据结构·数据库·redis
fai厅的秃头姐!2 小时前
C语言03
c语言·数据结构·算法
醉城夜风~2 小时前
[数据结构]单链表详解
数据结构·链表
lisanndesu2 小时前
动态规划
算法·动态规划
myprogramc2 小时前
十大排序算法
数据结构·算法·排序算法
记得早睡~2 小时前
leetcode150-逆波兰表达式求值
javascript·算法·leetcode
修己xj2 小时前
算法系列之贪心算法
算法
qy发大财2 小时前
跳跃游戏(力扣55)
算法·leetcode
BingLin-Liu2 小时前
蓝桥杯备考:搜索算法之排列问题
算法·职场和发展·蓝桥杯
计算机小白一个2 小时前
蓝桥杯 Java B 组之岛屿数量、二叉树路径和(区分DFS与回溯)
java·数据结构·算法·蓝桥杯