#955
Medium Algorithms Delete columns to make sorted ii
Array String Greedy
49.7% acceptance
Feb 25, 2026
1040
136
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.
Solution
Rust
Time O(n)
Space O(n)
impl Solution {
pub fn min_deletion_size(strs: Vec<String>) -> i32 {
let strs: Vec<Vec<u8>> = strs.iter().map(|s| s.bytes().collect()).collect();
let n = strs.len();
let cols = strs[0].len();
let mut sorted = vec![false; n - 1]; // sorted[i] = row i < row i+1 already
let mut deletes = 0;
'outer: for c in 0..cols {
// Check if deleting column c causes any issue
for i in 0..n-1 {
if !sorted[i] && strs[i][c] > strs[i+1][c] {
deletes += 1;
continue 'outer;
}
}
// Keep column c, update sorted
for i in 0..n-1 {
if strs[i][c] < strs[i+1][c] { sorted[i] = true; }
}
}
deletes
}
}