Skip to content

Commit ebaa68d

Browse files
authored
Create maximum-difference-between-even-and-odd-frequency-ii.py
1 parent ff56924 commit ebaa68d

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Time: O(d^2 * n)
2+
# Space: O(n)
3+
4+
# prefix sum, two pointers, sliding window
5+
class Solution(object):
6+
def maxDifference(self, s, k):
7+
"""
8+
:type s: str
9+
:type k: int
10+
:rtype: int
11+
"""
12+
def diff(x, y):
13+
prefix1, prefix2, prefix = [0]*(len(s)+1), [0]*(len(s)+1), [0]*(len(s)+1)
14+
for i in xrange(len(s)):
15+
prefix1[i+1] = prefix1[i]+int(s[i] == x)
16+
prefix2[i+1] = prefix2[i]+int(s[i] == y)
17+
prefix[i+1] = prefix[i]+(int(s[i] == x)-int(s[i] == y))
18+
result = float("-inf")
19+
mn = [[float("inf")]*2 for _ in xrange(2)]
20+
left = 0
21+
for right in xrange(k-1, len(s)):
22+
while k <= right-left+1 and prefix1[right+1]-prefix1[left] and prefix2[right+1]-prefix2[left]:
23+
x, y = prefix1[left]%2, prefix2[left]%2
24+
mn[x][y] = min(mn[x][y], prefix[left])
25+
left += 1
26+
x, y = prefix1[right+1]%2, prefix2[right+1]%2
27+
result = max(result, prefix[right+1]-mn[x^1][y])
28+
return result
29+
30+
lookup = set(s)
31+
return max(diff(x, y) for x in lookup for y in lookup if x != y)

0 commit comments

Comments
 (0)