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'字符,那么就停止循环(从这个字符作为起点,不再有满足条件的子串了)。

原文地址:https://www.cnblogs.com/asenyang/p/12349601.html