Algorithm
Problem Name: 955. Delete Columns to Make Sorted II
You are given an array of n
strings strs
, all of the same length.
We may choose any deletion indices, and we delete all the characters in those indices for each string.
For example, if we have strs = ["abcdef","uvwxyz"]
and deletion indices {0, 2, 3}
, then the final array after deletions is ["bef", "vyz"]
.
Suppose we chose a set of deletion indices answer
such that after deletions, the final array has its elements in lexicographic order (i.e., strs[0] <= strs[1] <= strs[2] <= ... <= strs[n - 1]
). Return the minimum possible value of answer.length
.
Example 1:
Input: strs = ["ca","bb","ac"] Output: 1 Explanation: After deleting the first column, strs = ["a", "b", "c"]. Now strs is in lexicographic order (ie. strs[0] <= strs[1] <= strs[2]). We require at least 1 deletion since initially strs was not in lexicographic order, so the answer is 1.
Example 2:
Input: strs = ["xc","yb","za"] Output: 0 Explanation: strs is already in lexicographic order, so we do not need to delete anything. Note that the rows of strs are not necessarily in lexicographic order: i.e., it is NOT necessarily true that (strs[0][0] <= strs[0][1] <= ...)
Example 3:
Input: strs = ["zyx","wvu","tsr"] Output: 3 Explanation: We have to delete every column.
Constraints:
n == strs.length
1 <= n <= 100
1 <= strs[i].length <= 100
strs[i]
consists of lowercase English letters.
Code Examples
#1 Code Example with Javascript Programming
Code -
Javascript Programming
const minDeletionSize = function (A) {
const set = new Set()
const m = A.length
let res = 0
if(m === 0) return 0
const n = A[0].length
for(j = 0; j < n; j++) {
if(set.size === m - 1) return res
for(i = 0; i < m - 1; i++) {
if(!set.has(i> && A[i][j] > A[i + 1][j]) {
res++
break
}
}
if(i < m - 1) continue
for(i = 0; i < m - 1; i++) {
if(A[i][j] < A[i + 1][j]) set.add(i>
}
}
return res
}
Copy The Code &
Try With Live Editor
Input
Output
#2 Code Example with Python Programming
Code -
Python Programming
class Solution:
def minDeletionSize(self, A):
res = 0
cur = [""] * len(A)
for col in zip(*A):
cur2 = list(zip(cur, col))
if cur2 == sorted(cur2):
cur = cur2
else:
res += 1
return res
Copy The Code &
Try With Live Editor
Input
Output