1 class Solution:
 2     def maxFreq(self, s: str, maxLetters: int, minSize: int, maxSize: int) -> int:
 3         n = len(s)
 4         if n < minSize:
 5             return 0
 6         left,right = 0,0
 7         #dic = {}
 8         res = {}
 9         while left <= n - minSize:
10             for width in range(minSize,maxSize+1):
11                 right = left + width
12                 if right > n:
13                     break
14                 #print('width:',width,'left:',left,'right:',right)
15                 dic = {}
16                 diffcount = 0
17                 for i in range(left,right):
18                     cur = s[i]
19                     if cur not in dic:
20                         dic[cur] = 1
21                         diffcount += 1
22                     else:
23                         dic[cur] += 1
24                 if diffcount <= maxLetters:
25                     word = s[left:right]
26                     if word not in res:
27                         res[word] = 1
28                     else:
29                         res[word] += 1
30                 else:
31                     break
32             left += 1
33         if len(res) > 0:
34             return max(res.values())
35         else:
36             return 0

算法思路:滑动窗口。

窗口的范围是[minSize,maxSize]之间,left从左到右遍历,每次得到一个right。

统计left到right这个窗口内的元素,有多少个不同元素,是否满足maxLetters限制。

如果满足条件则存储进res中,最后返回res出现次数最多的值(value)。

posted on 2019-12-22 13:31  Sempron2800+  阅读(144)  评论(0编辑  收藏  举报