码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • leetcode1358. 包含所有三种字符的子字符串数目


    思路:

    1. 由于字符串只有三个字母,易知包含三种字符a, b ,c中任意一个字符的子串 ,应该是字符串的所有字串
    2. 例如aaacb,就是5+4+3+2+1
    3. 三个都出现过至少一次的 = 包含三种字符a, b ,c中任意一个字符的所有子串 - 包含两个字符中任意一个字符的所有子串
    4. 描述不太清晰 ,例如aacb:
    5. 包含三种字符a, b ,c中任意一个字符的所有子串:a,aa,a,aac,ac,c,aacb,acb,cb,b
    6. 包含两个字符中任意一个字符的所有子串:a,aa,a,aac,ac,c,cb,b
    7. 相当于分解问题的思路,挺有用的
      代码如下:
    def numberOfSubstrings(self, s):
            """
            :type s: str
            :rtype: int
            """
            def findmax(s):
                win = collections.Counter()
                l,count = 0,0
                res = 0
                for r in range(len(s)):
                    win[s[r]] += 1
                    if win[s[r]] == 1:
                        count += 1
                    while count == 3:
                        win[s[l]] -= 1
                        if win[s[l]] == 0:
                            count -= 1
                        l += 1
                    res += r-l+1
                return res
            res = (len(s)**2 + len(s))/2
            return res - findmax(s)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    解法二
    找到一个满足条件的之后,在他之后的所有字符都满足条件
    所以加上它本身就是len(s)-r
    之后移动左指针,直到它不符合参考:
    https://leetcode.cn/problems/number-of-substrings-containing-all-three-characters/solution/si-kao-de-guo-cheng-bi-da-an-zhong-yao-xiang-xi-tu/

    def numberOfSubstrings(self, s):
            """
            :type s: str
            :rtype: int
            """
            win = collections.Counter()
            l,count = 0,0
            res = 0
            for r in range(len(s)):
                win[s[r]] += 1
                if win[s[r]] == 1:
                    count += 1
                while count == 3:
                    res += len(s)-r
                    win[s[l]] -= 1
                    if win[s[l]] == 0:
                        count -= 1
                    l += 1
            return res
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
  • 相关阅读:
    1分钟 Serverless 极速搭建真网站 领猫超卡之《极速搭建 Zblog 博客系统》场景体验
    2022-08-19 学习笔记 day42-JDBC
    【计算机网络】运输层习题(谢希仁)(3)
    未来互联网的新篇章:深度解析Web3技术
    如何正确使用电流探头
    【关于lombok框架一文秒懂】
    青少年python系列 27.turtle库绘制一个四叶花瓣
    js中的拖拽
    【Linux初阶】Linux工具学前常识 | 软件生态 | Linux下的软件安装与卸载
    软件测试实战项目【电商、银行、商城、金融、医药、电商】
  • 原文地址:https://blog.csdn.net/weixin_44392348/article/details/127894298
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号