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

LeetCode 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 ans = 0;int left = 0;unordered_map<char, int> cnt;int enough = 0;for (int i = 0; i < s.size(); ++i) {if (++cnt[s[i]] == 1) {++enough;}while (enough == 3) {if (--cnt[s[left]] == 0) {--enough;}++left;}ans += left;}return ans;}
};

如果输入字符串的长度为n,字符种类为m,则此算法时间复杂度为O(n),空间复杂度为O(m)。

相关文章:

  • 暑期前端训练day1
  • 前端适配方案之 flexible.js 到 postcss-px-to-viewport-8-plugin插件演进
  • Windows 10开始菜单优化方案,如何实现Win7风格开始菜单的还原
  • 【设计模式】用观察者模式对比事件订阅(相机举例)
  • 【K8S】详解NodePort 和 ClusterIP
  • 【K8S】详解Labels​​ 和 ​​Annotations
  • Android 应用多语言与系统语言偏好设置指南
  • 容器运行时保护:用Falco构建云原生安全防线
  • 简单理解HTTP/HTTPS协议
  • 基于 Apache POI 实现的 Word 操作工具类
  • AI公文写作,推荐AI材料星!
  • vue3 动态绑定 ref 并获取其 dom
  • Python 自动化运维与DevOps实践
  • Docker如何实现容器之间的通信
  • 李沐动手深度学习(pycharm中运行笔记)——12.权重衰退
  • GitLab CVE-2025-4278 安全漏洞解决方案
  • openLayers切换基于高德、天地图切换矢量、影像、地形图层
  • 使用NPOI库导出多个Excel并压缩zip包
  • 【跨界新视野】信号处理遇上VR/AR:下一代沉浸体验的核心技术与您的发表蓝海
  • STUN (Session Traversal Utilities for NAT) 服务器是一种网络协议
  • avada主题做网站/站长之家域名查询
  • 上传网站需要什么软件/电商网站上信息资源的特点包括
  • 厦门关键词优化服务/关键词优化排名公司
  • 天津做网站需要多少钱/沈阳疫情最新消息
  • 百度上怎么制作自己的网站/关键词排名点击软件工具
  • l临沂互助系统网站开发/查域名备案