周賽361。卡了快半小時才想通。

題目

輸入字串num,代表一個非負整數。

每次操作,你可以選擇num中的一個數位刪除。如果所有數位都被刪除,則num會變成0。

如果一個整數x能被25整除,則稱為特殊的

求最少需要多少操作才能使num變得特殊

解法

能被25整除的數,後兩位數只有00,25,50,75四種。分別檢查哪種結尾操作最少。

維護函數find(t),代表以t結尾的最少操作次數。
有時候num只有一位,避免麻煩可以先加一個前導0。
從後往前遍歷num,配對結尾t,字元不同則需要刪除,操作次數cnt加1,直到t匹配完成。

時間複雜度O(N)。
空間複雜度O(N)。

class Solution:
    def minimumOperations(self, num: str) -> int:
        num="0"+num
        N=len(num)
        
        def find(t):
            j=1
            cnt=0
            for i in reversed(range(N)):
                if num[i]!=t[j]:
                    cnt+=1
                    continue
                else:
                    j-=1
                    if j<0:break
            return cnt            
        
        return min(
            find("00"),
            find("25"),
            find("50"),
            find("75"),
        )