給定由 N 個小寫字母字符串組成的數組 A,其中每個字符串長度相等。
你需要選出一組要刪掉的列 D,對 A 執行刪除操作,使 A 中剩餘的每一列都是 非降序 排列的,然後請你返回 D.length 的最小可能值。
刪除 操作的定義是:選出一組要刪掉的列,刪去 A 中對應列中的所有字符,形式上,第 n 列爲 [A[0][n], A[1][n], …, A[A.length-1][n]])。(可以參見 刪除操作範例)
例子:
輸入:[“cba”, “daf”, “ghi”]
輸出:1
解釋:
當選擇 D = {1},刪除後 A 的列爲:[“c”,“d”,“g”] 和 [“a”,“f”,“i”],均爲非降序排列。
若選擇 D = {},那麼 A 的列 [“b”,“a”,“h”] 就不是非降序排列了。
思路:
從後向前遞歸檢查各列,直到l==-1,return 0
如果本列非降序,加一,檢查下一列,return dg()+1
否者,檢查下一列 return dg()
代碼:
class Solution:
def minDeletionSize(self, A: List[str]) -> int:
def dg(self,A,l):
if l==-1:
return 0
for i in range(len(A)-1):
if A[i][l]>A[i+1][l]:
return dg(self,A,l-1)+1
break
return dg(self,A,l-1)
return dg(self,A,len(A[0])-1)
我的函數嵌套不太會,如果有發現可以簡化的,歡迎留言