Hard
Subsequence With the Minimum Score — Python
Full explanation · Time O(n) · Space O(n)
# Time: O(n)
# Space: O(n)
# two pointers, dp
class Solution(object):
def minimumScore(self, s, t):
"""
:type s: str
:type t: str
:rtype: int
"""
right = [-1]*len(s) # right[i]: min removed rightmost index in s[i:]
j = len(t)-1
for i in reversed(xrange(len(s))):
if j >= 0 and t[j] == s[i]:
j -= 1
right[i] = j
result = j+1
left = 0 # left at i: max removed leftmost index in s[:i]
for i in xrange(len(s)):
result = max(min(result, right[i]-left+1), 0)
if left < len(t) and t[left] == s[i]:
left += 1
result = min(result, len(t)-left)
return result