题目链接:https://leetcode-cn.com/problems/delete-columns-to-make-sorted/
给出由 N
个小写字母串组成的数组 A
,所有小写字母串的长度都相同。
现在,我们可以选择任何一组删除索引,对于每个字符串,我们将删除这些索引中的所有字符。
举个例子,如果字符串为 "
abcdef
"
,且删除索引是 {0, 2, 3}
,那么删除之后的最终字符串为 "
bef
"
。
假设我们选择了一组删除索引 D
,在执行删除操作之后,A
中剩余的每一列都是有序的。
形式上,第 c
列为 [A[0][c], A[1][c], ..., A[A.length-1][c]]
返回 D.length
的最小可能值。
示例 1:
输入:["cba","daf","ghi"] 输出:1
示例 2:
输入:["a","b"] 输出:0
示例 3:
输入:["zyx","wvu","tsr"] 输出:3
提示:
1 <= A.length <= 100
1 <= A[i].length <= 1000
这道题的中文翻译有点问题,建议大家切成英文看,如果看不懂的话可以谷歌翻译,大概题意就是说有一个字符串数组,每个字符串的长度相同,这样我们可以把它看成一个字符的二维数组,现在的问题是,里面有多少个降序的列,实现的思路就是双重for循环遍历,以行下标作为第一重for循环,以列下标作为第二重for循环
因为比较简单,所以进行了一下优化,转化成char[][]可以减少charAt的时间消耗,break可以在出现一个不合理数据是就跳出,节省时间
public static void main(String[] args){
String[] str = {"a","b"};
System.out.println(minDeletionSize(str));
}
public static int minDeletionSize(String[] A) {
int count = 0;
int rowLength = A[0].length();
int colLength = A.length;
char[][] B = new char[colLength][rowLength];
for(int i=0; i<colLength; i++){
B[i] = A[i].toCharArray();
}
for(int j=0;j<rowLength;j++) {
for(int i = 0; i < colLength-1; i++){
if(B[i][j] > B[i+1][j]){
count++;
break;
}
}
}
return count;
}