首页 > 其他分享 >删列造序 II

删列造序 II

时间:2023-09-01 22:35:47浏览次数:37  
标签:String 删除 strs 造序 II int delContainer 删列 字典

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

选取一个删除索引序列,对于 strs 中的每个字符串,删除对应每个索引处的字符。

比如,有 strs = ["abcdef", "uvwxyz"],删除索引序列 {0, 2, 3},删除后 strs 为["bef", "vyz"]。

假设,我们选择了一组删除索引 answer,那么在执行删除操作之后,最终得到的数组的元素是按 字典序(strs[0] <= strs[1] <= strs[2] ... <= strs[n - 1])排列的,然后请你返回 answer.length 的最小可能值。

 

示例 1:

输入:strs = ["ca","bb","ac"]输出:1解释:

删除第一列后,strs = ["a", "b", "c"]。

现在 strs 中元素是按字典排列的 (即,strs[0] <= strs[1] <= strs[2])。

我们至少需要进行 1 次删除,因为最初 strs 不是按字典序排列的,所以答案是 1。

示例 2:

输入:strs = ["xc","yb","za"]输出:0解释:

strs 的列已经是按字典序排列了,所以我们不需要删除任何东西。

注意 strs 的行不需要按字典序排列。

也就是说,strs[0][0] <= strs[0][1] <= ... 不一定成立。

示例 3:

输入:strs = ["zyx","wvu","tsr"]输出:3解释:

我们必须删掉每一列。

 

提示:

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

 

思路

1、逐个遍历元素,判断元素与下一元素的顺序是否升序

2、按照字符列逐个比较,如果不是升序,表示该列需要删除,则删除该列,并重新执行1

3、直到所有都是按照顺序

代码

 

import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

/**
 *https://leetcode.cn/problems/delete-columns-to-make-sorted-ii/description/
 * 贪心
 */
public class Main {
    public static void main(String[] args) {
        Solution solution = new Solution();
        int i = solution.minDeletionSize(new String[] {"ousnatait", "xzswvwztr", "luknznxob"});
        System.out.println(i);
        //        solution.maxSlidingWindow(new int[]{1,3,-1,-3,5,3,6,7}, 3);
    }

}

class Solution {
    public int minDeletionSize(String[] strs) {
        HashSet<Integer> delContainer = new HashSet<>();
        //1、冒泡遍历,两两比较顺序
        for (int i = 0; i < strs.length - 1; i++) {
            while (!isOrder(strs[i], strs[i + 1], delContainer)){
                i = 0;
            }
            if (delContainer.size() == strs[0].length()){
                break;
            }
        }
        return delContainer.size();
    }

    private boolean isOrder(String s1, String s2, HashSet<Integer> delContainer) {
        for (int i = 0; i < s1.length(); i++) {
            if (delContainer.contains(i)){
                continue;
            }
            if (s1.charAt(i) < s2.charAt(i)){
                return true;
            }
            if (s1.charAt(i) > s2.charAt(i)){
                delContainer.add(i);
                return false;
            }
        }
        return true;
    }

}

 

标签:String,删除,strs,造序,II,int,delContainer,删列,字典
From: https://www.cnblogs.com/Adam-Ye/p/17672969.html

相关文章

  • 剑指 Offer 14- II. 剪绳子 II(中等)
    题目:classSolution{//本题用贪心算法,拆成尽可能多的3且不可以出现长度为1的小段。用dp会溢出,放弃吧public:intcuttingRope(intn){if(n==2)return1;if(n==3)return2;if(n==4)return4;longlongres=1;......
  • 机器学习 -> Machine Learning (II)
    这次来学习深度学习吧!1训练前1.1神经元与神经网络神经元是神经网络的基本单位,模拟了生物神经元的工作机制.每个神经元接受一组输入,将这些输入与其权重相乘,然后对所有的乘积求和,并加上一个偏置.最后,将得到的结果传递给激活函数.神经网络由多个神经元组成,这......
  • IPQ4019 IPQ4029 IPQ6010|IIOT|5G and WiFi 6:Application in Business and Industry
    5GandWiFi6:Application inBusinessandIndustryIntroductionAstheworldhurtlestowardsaneraofunprecedenteddigitaltransformation,twotechnologiesstandattheforefront,poisedtoreshapethelandscapeofbusinessandindustry:5GandWiFi6.Th......
  • 剑指 Offer 10- II. 青蛙跳台阶问题(简单)
    题目:classSolution{public:intnumWays(intn){vector<int>dp(n+1,1);for(inti=2;i<=n;i++){dp[i]=(dp[i-1]+dp[i-2])%1000000007;}returndp[n];}};......
  • iic和spi简记
    IIC通信协议两线式串行总线,多用于主控制器和从器件间的主从通信,在小数据量场合使用,有传输距离短,任意时刻只能有一个主机等特性。  SDA(Serialdata)数据线,D代表Data也就是数据,SendData也就是用来传输数据的SCL(Serialclockline)时钟线,C代表Clock也就是时钟也就是......
  • 剑指Offer 32 - III. 从上到下打印二叉树
    题目链接:剑指Offer32-III.从上到下打印二叉树题目描述:请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。解法思路:本题在一题的基础上,区分打印方向,加一个bool型的方向变......
  • 剑指Offer 32 - II. 从上到下打印二叉树 II
    题目链接:剑指Offer32-II.从上到下打印二叉树II题目描述:从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。解法思路:本题与上题的唯一区别就是在输出的时候,要将同一层的数输出在一行,这就意味着你需要知道哪些数是在一行的;这里巧妙的利用求队列......
  • 剑指 Offer 68 - II. 二叉树的最近公共祖先(简单)
    题目:classSolution{public:TreeNode*lowestCommonAncestor(TreeNode*root,TreeNode*p,TreeNode*q){if(root==p||root==q||root==nullptr)returnroot;//如果当前节点为空或者当前节点即为其中某个指定节点TreeNode*left=lowestCommo......
  • 剑指 Offer 55 - II. 平衡二叉树(简单)
    题目:classSolution{public:intgetHeight(TreeNode*cur){//递归函数返回的是以当前节点为根节点的高度。if(!cur)return0;//空节点的高度为0intleftHeight=getHeight(cur->left);//取得左节点的高度if(leftHeight=......
  • 剑指Offer 14- II. 剪绳子 II
    题目链接:剑指Offer14-II.剪绳子II题目描述:给你一根长度为n的绳子,请把绳子剪成整数长度的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1]...k[m-1]。请问k[0]k[1]...*k[m-1]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的......