Leetcode # 2844. Minimum Operations to Make a Special Number

Problem

https://leetcode.com/contest/weekly-contest-361/problems/minimum-operations-to-make-a-special-number/

Solution

Time Complexity: O(len(num))
Space Complexity: O(1)
(The input and output generally do not count towards the space complexity.)

class Solution:
  def minimumOperations(self, num: str) -> int:
      n = len(num)
      first_0 = first_5 = _2_or_7_after_first_5 = _5_or_0_after_first_0 = -1
      for i in range(n):
        if all(var >= 0 for var in [first_0, first_5, _2_or_7_after_first_5, _5_or_0_after_first_0]): break
        d = num[-1 - i]
        
        if first_0 < 0:
          if d == "0":
            first_0 = i
        elif _5_or_0_after_first_0 < 0 and (d == "5" or d == "0"):
          _5_or_0_after_first_0 = i
          
        if first_5 < 0:
          if d == "5":
            first_5 = i
        elif _2_or_7_after_first_5 < 0 and (d == "2" or d == "7"):
          _2_or_7_after_first_5 = i
          
      ans = n
      if first_0 >= 0:
        if _5_or_0_after_first_0 >= 0:
          ans = _5_or_0_after_first_0 - 1 # first_0 + (_5_or_0_after_first_0 - first_0 - 1)
        else:
          ans = n - 1
      if first_5 >= 0 and _2_or_7_after_first_5 >= 0:
        ans = min(ans, 
                  _2_or_7_after_first_5 - 1 # (first_5) + (_2_or_7_after_first_5 - first_5 - 1)
              )
      
      return ans

Last Updated on 2023/09/10 by A1go

目錄
Bitnami