当前位置: 首页 > article >正文

leetcode 1358. 包含所有三种字符的子字符串数目

题目如下
在这里插入图片描述
数据范围
在这里插入图片描述

这道题同样是不定长的滑动窗口,有意思的地方在于我们只需要找到每一个"最小合法的子串"对应的左右端点就行。什么意思呢?
题目要求合法子串必须包含abc 那么对于s = "abcaaaaaa"来说 sub = "abc"或者sub = "bca"就是最小合法子串,
根据题意只要子串包含"最小合法子串"那么都是合法的子串对于上面的s来说abc是对的 abca abcaa....都是对的而包含abc这个子串的大子串有n - i个(且计算了abc本身)
即s的长度减去右端点的小标,读者可以自己数数。通过不断移动固定左端点向右寻找这样的"最小合法子串"通过上面的公式不断相加就能得到答案。

通过代码

class Solution {
public:
    int numberOfSubstrings(string s) {
        int c[3];
        int n = s.size();
        int count = 0;
         c[0]=c[1]=c[2]=0;
        for(int i = -1,j = 0;j < n;){
                while(i < n &&!(c[0] != 0 && c[1] != 0 && c[2] != 0)){
                        if(++i == n)break;
                        c[s[i] - 'a']++;
                        
                }
                if(c[0] != 0 && c[1] != 0 && c[2] != 0){
           
                    count += n - i;
                }
                c[s[j++] - 'a']--;
            }
        
        return count;
    }
};

在这里插入图片描述


http://www.kler.cn/a/519696.html

相关文章:

  • Ansible自动化运维实战--script、unarchive和shell模块(6/8)
  • 【AI日记】25.01.25
  • PAT甲级-1024 Palindromic Number
  • 笔试-二维数组
  • 蓝桥杯之c++入门(一)【第一个c++程序】
  • impact 影响分析学习笔记(一)
  • 【PostgreSQL内核学习 —— (WindowAgg(一))】
  • 基于vue框架的的信用社业务管理系统设计与实现4gnx5(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 包安装利用 LNMP 实现 phpMyAdmin 的负载均衡并利用Redis实现会话保持nginx
  • 如何优化企业的CRM流程管理?
  • 【知识图谱(2)】电影知识图谱构建
  • 【测试人生】变更风险观测的流程逻辑设计
  • Docker基础命令和配置镜像代理(最新)
  • 【竞技宝】DOTA2-裂变天地S1:XG遭遇二连败命悬一线
  • 二叉树的层序遍历||力扣--107
  • chrome插件:网页图片高清下载
  • 使用LPT wiggler jtag自制三星单片机(sam88 core)编程器-S3F9454
  • 网易Android开发面试题200道及参考答案 (上)
  • 左右互博02-frida主动调用so函数
  • vue3组件el-table报错
  • 【python】三帧差法实现运动目标检测
  • postman生成前端测试接口时,是在本地还是在线上?
  • 从零开始构建一个JAVA项目
  • Linux学习笔记——网络管理命令
  • 旅游风景的代码项目
  • 数据结构基础之《(15)—排序算法小结》