leetcode打题-子字符串类型题目1

leetcode
题目类型
(1)判别不同的字符(a,b,c)----直接令其-‘a’得到哈希关系用于简化
(2)记录某个特定条件下的子数组题型—双指针(注意左右指针++的时机防止越界)

/*
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
*/
class Solution {
public:
    int numberOfSubstrings(string s) {
    	//左右指针
        int leftptr=0;
        int rightptr=0;
        //字符和数字之间的哈希关系,即-a
        int hash[3]={0,0,0};
        int reslut=0;
        for(int i=0;i<s.size();++i){
            
            hash[s[rightptr]-'a']++;
            //当满足时,往右会全部满足
            while(hash[0]&&hash[1]&&hash[2]){
                reslut+=s.size()-rightptr;
                hash[s[leftptr++]-'a']--;
            }
            rightptr++;
        }
        return reslut;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值