Leetcode Weekly Contest 245(前3题)

题目链接: Leetcode Weekly Contest 245

写在前面:

本次周赛做出了第1题和第3题,端午假期也不能忘了打周赛鸭。

1、1897. Redistribute Characters to Make All Strings Equal

难度:Easy

题目大意:

给出一个字符串数组,每次操作可以将一个字符串中的一个字符移动到数组中莹莹字符串中的任意位置。判断能否将数组中的每个字符串变得都一样,操作次数不限。

思路:

因为操作次数不限,统计整个数组中各个字符的个数,然后判断能否平分都各个字符串即可。

代码

class Solution {
    public boolean makeEqual(String[] words) {
        int len=words.length;
        int[] count=new int[26];
        int sum=0;//字符总数
        for(String s:words){
            char[] arr=s.toCharArray();
            sum+=arr.length;
            for(char c:arr){
                count[c-'a']++;
            }
        }
        if(sum%len!=0){
            return false;
        }
        for(int n:count){
            if(n%len!=0){
                return false;
            }
        }
        return true;
    }
}

2、1898. Maximum Number of Removable Characters

难度:Medium

题目大意:

详见题意。

思路:

对k的取值进行二分。判断一个字符串是不是另一个字符串的子序列可以参考Leetcode 392. Is Subsequence

代码

class Solution {
    public int maximumRemovals(String s, String p, int[] removable) {
        int l=0,r=removable.length-1;
        
        char[] arr=s.toCharArray();
        while(l<r){//二分查找
            int mid=(l+r+1)/2;
            StringBuilder sb=new StringBuilder(s);
            for(int i=0;i<=mid;i++){
                sb.setCharAt(removable[i],'#');
                //替换成除小写英文字母以外的字符,和删除字符再判断是不是s的子序列效果一样。
            }
            String str=sb.toString();
            if(isSubsequence(p,str)){
                l=mid;
            }
            else{
                r=mid-1;
            }
        }
        StringBuilder sb=new StringBuilder(s);
        for(int i=0;i<=l;i++){
            sb.setCharAt(removable[i],'#');
        }
        String str=sb.toString();
        if(isSubsequence(p,str)){
            return l+1;
        }
        return 0;
    }
    public boolean isSubsequence(String s, String t) {//判断s是不是t的子序列
        if(s==null || t==null){
            return false;
        }
        int i=0;
        int j=0;
        while(i<s.length() && j<t.length()){
            if(s.charAt(i)==t.charAt(j)){
                i++;
            }
            j++;
        }
        return i==s.length();
    }
}

3、1899. Merge Triplets to Form Target Triplet

难度:Medium

题目大意:

详见题目。

思路:

只有数组元素中有任何一个元素超过target中对应的元素,则将这个数组移除,然后求剩下数组各个位置上的最大值,判断是否等于目标值。

代码

class Solution {
    public boolean mergeTriplets(int[][] triplets, int[] target) {
        int a=target[0],b=target[1],c=target[2];
        int maxA=-1,maxB=-1,maxC=-1;
        for(int[] arr:triplets){
            if(arr[0]>a||arr[1]>b||arr[2]>c){
                continue;
            }
            maxA=Math.max(maxA,arr[0]);
            maxB=Math.max(maxB,arr[1]);
            maxC=Math.max(maxC,arr[2]);
            if(maxA==a&&maxB==b&&maxC==c){
                return true;
            }
        }
        if(maxA==a&&maxB==b&&maxC==c){
            return true;
        }
        return false;
    }
}

4、1900. The Earliest and Latest Rounds Where Players Compete

难度:Hard

题目大意:

详见题目。

思路

暂时不会

代码

 //
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值