leetcode1358. 包含所有三种字符的子字符串数目
创始人
2024-01-25 17:00:33
0

思路:

  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,0res = 0for r in range(len(s)):win[s[r]] += 1if win[s[r]] == 1:count += 1while count == 3:win[s[l]] -= 1if win[s[l]] == 0:count -= 1l += 1res += r-l+1return resres = (len(s)**2 + len(s))/2return res - findmax(s)

解法二
找到一个满足条件的之后,在他之后的所有字符都满足条件
所以加上它本身就是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,0res = 0for r in range(len(s)):win[s[r]] += 1if win[s[r]] == 1:count += 1while count == 3:res += len(s)-rwin[s[l]] -= 1if win[s[l]] == 0:count -= 1l += 1return res

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...