• LeetCode No944. 删列造序


    题目

    给你由 n 个小写字母字符串组成的数组 strs,其中每个字符串长度相等。

    这些字符串可以每个一行,排成一个网格。例如,strs = ["abc", "bce", "cae"] 可以排列为:

    abc
    bce
    cae
    你需要找出并删除 不是按字典序升序排列的 列。在上面的例子(下标从 0 开始)中,列 0('a', 'b', 'c')和列 2('c', 'e', 'e')都是按升序排列的,而列 1('b', 'c', 'a')不是,所以要删除列 1 。

    返回你需要删除的列数。

    示例 1:

    输入:strs = ["cba","daf","ghi"]
    输出:1
    解释:网格示意如下:
    cba
    daf
    ghi
    列 0 和列 2 按升序排列,但列 1 不是,所以只需要删除列 1 。

    示例 2:

    输入:strs = ["a","b"]
    输出:0
    解释:网格示意如下:
    a
    b
    只有列 0 这一列,且已经按升序排列,所以不用删除任何列。

    示例 3:

    输入:strs = ["zyx","wvu","tsr"]
    输出:3
    解释:网格示意如下:
    zyx
    wvu
    tsr
    所有 3 列都是非升序排列的,所以都要删除。

    提示:

    n == strs.length
    1 <= n <= 100
    1 <= strs[i].length <= 1000
    strs[i] 由小写英文字母组成

    思路

    两层循环遍历,以列的形式遍历字符串数组,只要碰到有一个非递增的列,计数器cnt+1。

    AC代码

    点击查看代码
    class Solution {
        public int minDeletionSize(String[] strs) {
            int cnt = 0;
            int n = strs.length;
            if( n <= 1 ) {
                return cnt;
            }
            int len = strs[0].length();
            for(int i=0; i<len; i++) {
                for(int j=0; j<n-1; j++) {
                    if(strs[j].charAt(i)>strs[j+1].charAt(i) ) {
                        cnt ++;
                        break;
                    }
                }
            }
            return cnt;
        }
    }
    
  • 相关阅读:
    java 泛型 类型作为参量 Class<T> transform
    面向对象的类方法只具有命名空间的作用
    编程语言沉思录—编程语言的体系结构
    类型约束的作用
    函数重载、多态与型变
    函数类型与型变
    型变(逆变)函数
    scala 型变
    泛型编程的几个关键概念
    泛型是包含类型参数的抽象类型—类型构造器
  • 原文地址:https://www.cnblogs.com/Asimple/p/16264316.html
Copyright © 2020-2023  润新知