Leetcode # 2844. Minimum Operations to Make a Special Number
- 2023.09.10
- ★★ Medium Finite-State Machine LeetCode
Problem
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