给定由 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)
我的函数嵌套不太会,如果有发现可以简化的,欢迎留言