Skip to content

Commit 07e46d9

Browse files
authored
Update minimum-deletions-to-make-string-k-special.py
1 parent 1a47ab4 commit 07e46d9

File tree

1 file changed

+31
-1
lines changed

1 file changed

+31
-1
lines changed

Python/minimum-deletions-to-make-string-k-special.py

+31-1
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,40 @@ def counting_sort(arr, key=lambda x:x, reverse=False): # Time: O(n), Space: O(n
4747
return result
4848

4949

50+
# Time: O(n + 26 * log(26))
51+
# Space: O(26)
52+
# freq table, sort, two pointers
53+
class Solution2(object):
54+
def minimumDeletions(self, word, k):
55+
"""
56+
:type word: str
57+
:type k: int
58+
:rtype: int
59+
"""
60+
cnt = [0]*26
61+
for x in word:
62+
cnt[ord(x)-ord('a')] += 1
63+
arr = sorted(x for x in cnt if x)
64+
result = float("inf")
65+
right = prefix = 0
66+
suffix = len(word)
67+
prev = -1
68+
for left in xrange(len(arr)):
69+
if left+1 < len(arr) and arr[left+1] == arr[left]:
70+
continue
71+
while right < len(arr) and arr[right] <= arr[left]+k:
72+
suffix -= arr[right]
73+
right += 1
74+
result = min(result, prefix+(suffix-(arr[left]+k)*(len(arr)-right)))
75+
prefix += arr[left]*(left-prev)
76+
prev = left
77+
return result
78+
79+
5080
# Time: O(n + 26^2)
5181
# Space: O(26)
5282
# freq table
53-
class Solution2(object):
83+
class Solution3(object):
5484
def minimumDeletions(self, word, k):
5585
"""
5686
:type word: str

0 commit comments

Comments
 (0)