1. 程式人生 > >134、刪列造序

134、刪列造序

題目描述
給定由 N 個小寫字母字串組成的陣列 A,其中每個字串長度相等。

選取一個刪除索引序列,對於 A 中的每個字串,刪除對應每個索引處的字元。 所餘下的字串行從上往下讀形成列。

比如,有 A = [“abcdef”, “uvwxyz”],刪除索引序列 {0, 2, 3},刪除後 A 為[“bef”, “vyz”], A 的列分別為[“b”,“v”], [“e”,“y”], [“f”,“z”]。(形式上,第 n 列為 [A[0][n], A[1][n], …, A[A.length-1][n]])。

假設,我們選擇了一組刪除索引 D,那麼在執行刪除操作之後,A 中所剩餘的每一列都必須是 非降序 排列的,然後請你返回 D.length 的最小可能值。

示例 1:

輸入:[“cba”, “daf”, “ghi”]
輸出:1
解釋:
當選擇 D = {1},刪除後 A 的列為:[“c”,“d”,“g”] 和 [“a”,“f”,“i”],均為非降序排列。
若選擇 D = {},那麼 A 的列 [“b”,“a”,“h”] 就不是非降序排列了。
示例 2:

輸入:[“a”, “b”]
輸出:0
解釋:D = {}
示例 3:

輸入:[“zyx”, “wvu”, “tsr”]
輸出:3
解釋:D = {0, 1, 2}
提示:

1 <= A.length <= 100
1 <= A[i].length <= 1000
題目描述的很複雜,但是讀懂了就不復雜了

class Solution {
    public int minDeletionSize(String[] A) {
       int count = 0;
		for (int i = 0; i < A[0].length(); i++) {
			for (int j = 0; j < A.length-1; j++) {
				if(A[j].charAt(i) > A[j+1].charAt(i) ){
					count++;
					break;
				}
				
				
			}
		}
		
		
        return count; 
    }
}

排名靠前的程式碼

class Solution {
    public int minDeletionSize(String[] A) {
        char[][] temp = new char[A.length][A[0].length()];
        int result = 0;
        if(A.length < 2) {
            return result;
        }
        for(int i = 0; i < A.length; i ++) {
            char[] row = A[i].toCharArray();
            temp[i] = row;
        }
        ck: for(int i = 0; i < temp[0].length; i ++) {
            for(int j = 0; j < temp.length - 1; j ++) {
                if(temp[j][i] > temp[j + 1][i]) {
                    result ++;
                    continue ck;
                }
            }
        }
        return result;
    }
}

另一個版本

class Solution {
    public int minDeletionSize(String[] A) {
        ArrayList<Integer> t = new ArrayList<>();
        for (int i = 0; i < A[0].length(); i++) {
            char[] arr = new char[A.length];
            for (int j = 0; j < A.length; j++) {
                arr[j] = A[j].charAt(i);
            }
            for (int m = 0; m < arr.length - 1; m++) {
                if(arr[m] > arr[m+1]) {
                    t.add(i);
                    break;
                }else{
                    continue;
                }
            }
        }
        return t.size();
    }
}