Skip to main content
Back to problems
#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)
LeetCode
solution.rs
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
  }
}