
我们先来看题目描述难易度简单给你由 n 个小写字母字符串组成的数组 strs其中每个字符串长度相等。这些字符串可以每个一行排成一个网格。例如strs [abc, bce, cae] 可以排列为abc bce cae你需要找出并删除 不是按字典序升序排列的 列。在上面的例子下标从 0 开始中列 0a, b, c和列 2c, e, e都是按升序排列的而列 1b, c, a不是所以要删除列 1 。返回你需要删除的列数。示例 1输入strs [cba,daf,ghi] 输出1 解释网格示意如下 cba daf ghi 列 0 和列 2 按升序排列但列 1 不是所以只需要删除列 1 。示例 2输入strs [a,b] 输出0 解释网格示意如下 a b 只有列 0 这一列且已经按升序排列所以不用删除任何列。示例 3输入strs [zyx,wvu,tsr] 输出3 解释网格示意如下 zyx wvu tsr 所有 3 列都是非升序排列的所以都要删除。提示n strs.length1 n 1001 strs[i].length 1000strs[i] 由小写英文字母组成解决方案方法直接遍历思路和算法题目要求删除不是按字典序升序排列的列由于每个字符串的长度都相等我们可以逐列访问字符串数组统计不是按字典序升序排列的列。对于第 j 列的字符串我们需要检测所有相邻字符是否均满足 strs [ i−1 ] [ j ] ≤ strs [ i ][ j ] 。代码Javaclass Solution { public int minDeletionSize(String[] strs) { int row strs.length; int col strs[0].length(); int ans 0; for (int j 0; j col; j) { for (int i 1; i row; i) { if (strs[i - 1].charAt(j) strs[i].charAt(j)) { ans; break; } } } return ans; } }Cclass Solution { public: int minDeletionSize(vectorstring strs) { int row strs.size(); int col strs[0].size(); int ans 0; for (int j 0; j col; j) { for (int i 1; i row; i) { if (strs[i - 1][j] strs[i][j]) { ans; break; } } } return ans; } };C#public class Solution { public int MinDeletionSize(string[] strs) { int row strs.Length; int col strs[0].Length; int ans 0; for (int j 0; j col; j) { for (int i 1; i row; i) { if (strs[i - 1][j] strs[i][j]) { ans; break; } } } return ans; } }