经典算法题之删列造序(二)

解决方案

方法一:直接遍历思路和算法

题目要求删除不是按字典序升序排列的列,由于每个字符串的长度都相等,我们可以逐列访问字符串数组,统计不是按字典序升序排列的列。

对于第 j 列的字符串,我们需要检测所有相邻字符是否均满足 strs i−1 j ≤ strs i j 。

代码

Java

复制代码
class Solution {
    public int minDeletionSize(String[] strs) {
        int row = strs.length;
        int col = strs[0].length();
        int ans = 0;
        for (int j = 0; j < col; ++j) {
            for (int i = 1; i < row; ++i) {
                if (strs[i - 1].charAt(j) > strs[i].charAt(j)) {
                    ans++;
                    break;
                }
            }
        }
        return ans;
    }
}

C++

复制代码
class Solution {
public:
    int minDeletionSize(vector<string>& strs) {
        int row = strs.size();
        int col = strs[0].size();
        int ans = 0;
        for (int j = 0; j < col; ++j) {
            for (int i = 1; i < row; ++i) {
                if (strs[i - 1][j] > strs[i][j]) {
                    ans++;
                    break;
                }
            }
        }
        return ans;
    }
};

C

复制代码
int minDeletionSize(char ** strs, int strsSize) {
    int row = strsSize;
    int col = strlen(strs[0]);
    int ans = 0;
    for (int j = 0; j < col; ++j) {
        for (int i = 1; i < row; ++i) {
            if (strs[i - 1][j] > strs[i][j]) {
                ans++;
                break;
            }
        }
    }
    return ans;
}

复杂度分析

时间复杂度:O(m×n),其中 m 为字符串数组的长度,n 为数组中每个字符串的长度,判定每一列的的字典序需要遍历字符串数组每一列,因此时间复杂度为 O(m×n)。

空间复杂度:O(1)。

相关推荐
302wanger23 分钟前
DeepSeek-V4.1-Flash-1017 免费用到1024,速来
算法
lisw0541 分钟前
微分与积分的本质区别解析
算法·数学建模·极限编程
xys_6781 小时前
深挖数据结构:树和二叉树(上)
数据结构·算法
BeiGuTing_code1 小时前
Java动态数组(一)
java·数据结构·windows
Interview Aid1122 小时前
Google SWE Intern VO 面经:两轮 Coding,Follow-up 考察 BFS 状态
算法
琳达爱分享2 小时前
从单机令牌桶到集群限流:一次配额超发的复盘
后端·算法
range2 小时前
带TTL的LRU缓存的实现-字节手撕-26/10/19
算法
糖果豆豆2 小时前
n log n 到底从哪来?排序下界、2-SAT 与 3-SAT、停机问题,卡的是同一件事
算法·架构
地平线开发者2 小时前
【玩转 征程6 算法工具链:PTQ 工具篇】hb_verifier
算法·自动驾驶
171320330计算机毕设编程2 小时前
计算机毕业设计 基于springboot+vue的在线观鸟视频播放网站 LW PPT
java·大数据·vue.js·spring boot·算法·课程设计