leetcode1358

Posted AsenYang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode1358相关的知识,希望对你有一定的参考价值。

 1 class Solution:
 2     def numberOfSubstrings(self, s: str) -> int:
 3         n = len(s)
 4         prelist = []
 5         for i in range(n):
 6             a_index = s.find(a,i)
 7             b_index = s.find(b,i)
 8             c_index = s.find(c,i)
 9             prelist.append([a_index,b_index,c_index])
10         count = 0
11         for i in range(n):
12             curlist = prelist[i]
13             minIndex = min(curlist)
14             maxIndex = max(curlist)
15             if minIndex != -1:
16                 count += n - maxIndex
17             else:
18                 break
19         return count

 

算法思路:字符串查询。

记录每一个字符串的当前位置向后,下一次‘a‘/‘b‘/‘c‘字符的索引。

每次计算当前位置三种字符下一个索引的最大值,从当前位置开始,到这个最大值这个子字符串是从这个起点开始的最短子串。

向后每次增加一个字符,都满足条件。

如果从当前位置向后,不再有下一个‘a‘/‘b‘/‘c‘字符,那么就停止循环(从这个字符作为起点,不再有满足条件的子串了)。

以上是关于leetcode1358的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode1358_包含所有三种字符的子字符串数目

p1358

[KMP]HDU1358 Period

hdu 1358

E - Period HDU-1358

HDU-1358 Period 字符串问题 KMP算法 求最小循环节