35 Delete Columns to Make Sorted

題目

We are given an array A of N lowercase letter strings, all of the same length.

Now, we may choose any set of deletion indices, and for each string, we delete all the characters in those indices.

For example, if we have an array A = [“abcdef”,“uvwxyz”] and deletion indices {0, 2, 3}, then the final array after deletions is [“bef”, “vyz”], and the remaining columns of A are [“b”,“v”], [“e”,“y”], and [“f”,“z”]. (Formally, the c-th column is [A[0][c], A[1][c], …, A[A.length-1][c]].)

Suppose we chose a set of deletion indices D such that after deletions, each remaining column in A is in non-decreasing sorted order.

Return the minimum possible value of D.length.

Example 1:

Input: [“cba”,“daf”,“ghi”]
Output: 1
Explanation:
After choosing D = {1}, each column [“c”,“d”,“g”] and [“a”,“f”,“i”] are in non-decreasing sorted order.
If we chose D = {}, then a column [“b”,“a”,“h”] would not be in non-decreasing sorted order.

Example 2:

Input: [“a”,“b”]
Output: 0
Explanation: D = {}

Example 3:

Input: [“zyx”,“wvu”,“tsr”]
Output: 3
Explanation: D = {0, 1, 2}

Note:

1 <= A.length <= 100
1 <= A[i].length <= 1000

分析

題意,建議直接看example。給定一個字符串數組,裏面的每個字符串都有相同長度,每個字符串相同位置的字母稱爲一組,如[“ab”,“cd”],則ac爲一組、bd爲一組。求出“刪除最少組數的字符串,讓每組保持遞增”。如[“cba”,“daf”,“ghi”],刪除bah這一組之後,其他組都是遞增的,因此最少組數是1。

思路:
拿到每個字符串中的字符,如果前後非遞增,則結果++;

解答

class Solution {
    public int minDeletionSize(String[] A) {
        int ans = 0;
        // 拿到每個字符串字母
        for (int c = 0; c < A[0].length(); ++c)
        	// 拿到每個字符串
            for (int r = 0; r < A.length - 1; ++r)
            	// 如果當前比後一個大(遞減),則ans++,並跳過當前字符串
                if (A[r].charAt(c) > A[r+1].charAt(c)) {
                    ans++;
                    break;
                }

        return ans;
    }
}

比較特別的是,常見的雙層遍歷都是外層爲行內層爲列,此處使用的是外層爲列內層爲行。因爲,此處有這個需求:當需要break或continue外層循環的時候,可以把內外循環交換。此處由於需要在條件滿足時跳過行,而直接寫break,只會斷開內層循環。因此,此處是外層爲列,內層爲行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章