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: A = ["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 = ["a","b"]
Output: 0
Explanation: D = {}
Example 3:
Input: A = ["zyx","wvu","tsr"]
Output: 3
Explanation: D = {0, 1, 2}
Constraints:
1 <= A.length <= 100
1 <= A[i].length <= 1000
这道题给了一个字符串数组,里面的字符串长度均相同,这样如果将每个字符串看作一个字符数组的话,于是就可以看作的一个二维数组,题目要求所有列上的字符是非递减顺序的,问最少需要删掉多少列。这道题唯一的难点就是读懂晦涩的题意,估计是出自非母语之手的,其他的并没有太大的难度,就是一个按列来遍历二维数组的操作,若当前位置的字符小于等于下一行同列上的字符,则跳过继续比较下一行和下下一行上的字符。否则说明需要删掉该列,结果 res 自增1,且 break 掉当前列即可,参见代码如下:
class Solution {
public:
int minDeletionSize(vector<string>& A) {
int n = A.size(), len = A[0].size(), res = 0;
for (int j = 0; j < len; ++j) {
for (int i = 0; i < n - 1; ++i) {
if (A[i][j] <= A[i + 1][j]) continue;
++res;
break;
}
}
return res;
}
};
Github 同步地址:
https://github.com/grandyang/leetcode/issues/944
参考资料:
https://leetcode.com/problems/delete-columns-to-make-sorted/
LeetCode All in One 题目讲解汇总(持续更新中…)
转载请注明来源于 Grandyang 的博客 (grandyang.com),欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 grandyang@qq.com