goodwish

1208. Get Equal Substrings Within Budget

Oct 5th, 2019
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.29 KB | None | 0 0
  1. meat two_pointer prefix_sum 同向双指针 模板
  2.  
  3. Q: 给定两个同等长度的字符串, 两个字符串之间的距离就是更改他们的成本,
  4. i.e. c -> a, cost = ord("c") - ord("a") = 2
  5. 让你计算在指定成本 max_cost 范围内, 尽可能多的修改字符, 求能得到的最长子串长度.
  6.  
  7. 思路: 先初始化一个差值绝对值的前缀和数组,
  8. 然后用同向双指针模板, (循环)固定每一个右指针, 直到越过指定成本:
  9. 内循环, 递增左指针, 找左右指针能够扩展的最长距离.
  10.  
  11. O(n) time.
  12.  
  13. while r < n:
  14.     r += 1
  15.     while pre_sum[r] - pre_sum[l] > maxCost # and l <= r:
  16.         l += 1
  17.     if r - l > max_len:
  18.         max_len = r - l
  19. return max_len
  20.  
  21. <code>
  22. class Solution:
  23.     def equalSubstring(self, s, t, maxCost):
  24.         n = len(s)
  25.         pre_sum = [0]
  26.         for i in range(n):
  27.             cost = abs(ord(t[i]) - ord(s[i]))
  28.             pre_sum.append(pre_sum[-1] + cost)
  29.         l, r = 0, 0
  30.         max_len = 0
  31.         while r < n:
  32.             r += 1
  33.             while pre_sum[r] - pre_sum[l] > maxCost:
  34.                 l += 1
  35.             if r - l > max_len:
  36.                 max_len = r - l
  37.         return max_len
  38.  
  39. o = Solution()
  40. s = "krrgw"
  41. t = "zjxss"
  42. maxCost = 19
  43. ans = o.equalSubstring(s, t, maxCost)
  44. print(ans)
Add Comment
Please, Sign In to add comment