Код: Выделить всё
You are given a string s consisting only of characters 'a' and 'b'.
You can delete any number of characters in s to make s balanced. s is balanced if there is no pair of indices (i,j) such that i < j and s[i] = 'b' and s[j]= 'a'.
Return the minimum number of deletions needed to make s balanced.
Constraints:
1 "aabbbb")
Изначально я сделал это
Код: Выделить всё
class Solution:
def minimumDeletions(self, s: str) -> int:
@lru_cache(None)
def dfs(index, last_char):
if index == len(s):
return 0
if s[index] >= last_char:
keep = dfs(index + 1, s[index])
delete = 1 + dfs(index + 1, last_char)
return min(keep, delete)
else:
return 1 + dfs(index + 1, last_char)
return dfs(0, 'a')
Код: Выделить всё
class Solution:
def minimumDeletions(self, s: str) -> int:
self.min_deletions = float('inf')
memo = {}
def dfs(index, last_char, current_deletions):
if current_deletions >= self.min_deletions:
return float('inf')
if index == len(s):
self.min_deletions = min(self.min_deletions, current_deletions)
return 0
if (index, last_char) in memo:
return memo[(index, last_char)]
if s[index] >= last_char:
keep = dfs(index + 1, s[index], current_deletions)
delete = 1 + dfs(index + 1, last_char, current_deletions + 1)
result = min(keep, delete)
else:
result = 1 + dfs(index + 1, last_char, current_deletions + 1)
memo[(index, last_char)] = result
return result
return dfs(0, 'a', 0)
Подробнее здесь: https://stackoverflow.com/questions/788 ... -recursion