↓快轉到主要內容
  1. LeetCode/

LeetCode 944: Delete Columns to Make Sorted

·1 分鐘· ·
LeetCode Easy Array String Longest-Increasing-Subsequence
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: easy 第一次嘗試:2022-09-26

  • 提交紀錄:Wrong Answer ×2 → Accepted

解題思路
#

zip(*strs) 會把每一欄變成一個 tuple。一欄需要刪掉,代表它不是非遞減的,也就是存在 col[i] > col[i + 1]。數這樣的欄有幾個。

我的嘗試
#

  • 第一版忘了 return。
  • 第二版寫成 sum(sorted(s) == s ...),數的是排好的欄,意思剛好相反;而且 s 是 tuple、sorted(s) 是 list,兩者永遠不相等,所以一直回傳 0:["c", "b"] 答案 1。
  • 改成 sorted(s) != list(s) 就 AC 了。

正確解法
#

class Solution:
    def minDeletionSize(self, strs: List[str]) -> int:
        return sum(any(a > b for a, b in zip(col, col[1:])) for col in zip(*strs))

複雜度
#

時間 O(總字元數),空間 O(m)。

要特別避免的錯誤
#

  • zip 產生的是 tuple,sorted 回傳 list,直接用 == 比永遠不相等。
  • 要數的是沒排好的欄。

面試口說整理
#

我用 zip 取出每一欄,檢查有沒有相鄰兩個字元是遞減的,有的話這欄就要刪,最後數有幾欄。時間是總字元數。

相關文章

LeetCode 929: Unique Email Addresses
·1 分鐘
LeetCode Easy Array Hash-Table String
LeetCode 929 解題筆記:用 @ 切開,只處理 local 的部分(+ 之後丟掉、去掉 .),接回 domain 後放進集合
LeetCode 953: Verifying an Alien Dictionary
·1 分鐘
LeetCode Easy Array Hash-Table String
LeetCode 953 解題筆記:把字母對應到外星順序的 index,相鄰兩個單字找第一個不同的字元比較,沒有不同時短的要在前面
LeetCode 821: Shortest Distance to a Character
·1 分鐘
LeetCode Easy Array Two-Pointers String
LeetCode 821 解題筆記:左往右掃一次記錄到左邊最近的 c 的距離,右往左再掃一次取較小值
LeetCode 819: Most Common Word
·1 分鐘
LeetCode Easy Array Hash-Table String Counting
LeetCode 819 解題筆記:標點換成空白、全部轉小寫再切單字,計數後找出不在 banned 裡的最多的那個
LeetCode 806: Number of Lines To Write String
·1 分鐘
LeetCode Easy Array String
LeetCode 806 解題筆記:模擬寫字,加上去會超過 100 就換行;剛好 100 時還留在這一行
LeetCode 748: Shortest Completing Word
·1 分鐘
LeetCode Easy Array Hash-Table String
LeetCode 748 解題筆記:車牌只看字母並轉小寫計數,找出每個字母次數都夠的最短單字,同長度取最前面的