大家好,我是 @负雪明烛。👈👈 点击关注,优质题解不间断。
题目大意
题意是:对于输入的字符串数组 strs
,让你找出有几列不是升序的。(题目保证了strs
中每个字符串的长度相等)
「升序」是指每个元素都大于等于前面的元素。
注意,题目中所说的「删除」,是指某列不满足升序条件,而不是真的要把它从
strs
中直接删除。
如下图所示:
- 输入字符串
strs = ["abc", "bce", "cae"]
; - 按行排列成二维数;
- 逐一判断每列是否是升序的,如果不是升序,就是题目中所说的要被“删除”;
- 其中第 1 列不是升序的,因此被删除;
strs
共删除 1 列。
解题方法
一图胜千言,上图已经把解法阐明了。
我们需要对每列进行遍历,判断每一列是不是都升序的:
- 升序的列是符合条件的。
- 非升序的列是不符合条件的,也就是题目中所谓要「删除」的。
对于本题,肯定是两重 $for$ 循环:
- 外层的 $for$ 循环是对列进行循环:遍历所有的列。
- 内层的 $for$ 循环是对行进行循环:判断该列中的是否是升序的。
- 当内层的 $for$ 循环找到「降序」的,那么把结果 $+1$,并把内层 $for$ 循环 $break$ 掉。
代码如下:
class Solution {
public:
int minDeletionSize(vector<string>& strs) {
const int rows = strs.size();
const int cols = strs[0].size();
int res = 0;
for (int col = 0; col < cols; ++col) {
for (int row = 1; row < rows; ++row) {
if (strs[row][col] < strs[row - 1][col]) {
res ++;
break;
}
}
}
return res;
}
};
复杂度
- 力扣题目有点像阅读理解题吗,如果看不懂题目,不妨在题解区找找「负雪明烛」的题解,每篇都会把题意讲清楚。
我是 @负雪明烛 ,刷算法题 1000 多道,写了 1000 多篇算法题解,收获阅读量 300 万。
关注我,你将不会错过我的精彩动画题解、面试题分享、组队刷题活动,进入主页 @负雪明烛 右侧有刷题组织,从此刷题不再孤单。
- 在刷题的时候,如果你不知道该怎么刷题,可以看 LeetCode 应该怎么刷?
- 如果你觉得题目太多,想在短时间内快速提高,可以看 LeetCode 最经典的 100 道题。
- 送你一份刷题的代码模板:【LeetCode】代码模板,刷题必会
- 我写的 1000 道 LeetCode 题解,都在这里了,免费拿走。