Leetcode Weekly Contest 249(前两题)

本文介绍了LeetCode最新周赛的两道难题,包括数组连接(Easy)和回文子序列(Medium)。对于1929.ConcatenationofArray问题,通过模拟原数组的连接过程解决;1930.UniqueLength-3PalindromicSubsequences则利用前缀和统计字母出现次数,找出不同回文子序列的数量。详细思路和代码已给出。
摘要由CSDN通过智能技术生成

题目链接: Leetcode Weekly Contest 249

写在前面:

本次周赛做出了前两题,头一次碰到一场周赛两道hard题。

1、1929. Concatenation of Array

难度:Easy

题目大意:

详见题意。

思路:

按照题意模拟即可。

class Solution {
    public int[] getConcatenation(int[] nums) {
        int n=nums.length;
        int[] res=new int[2*n];
        for(int i=0;i<2*n;i++){
            res[i]=nums[i%n];
        }
        return res;
    }
}

2、1930. Unique Length-3 Palindromic Subsequences

难度:Medium

题目大意:

判断一个字符串中有多少个不同的长度为3的回文子序列。

思路:

联想到Leetcode1906中用到的前缀和思想,本题也用前缀和来统计字母出现的次数,因为回文串的长度为3且首尾的字符相同,所以只要找到各个小写字母最靠前的位置和最靠后的位置,然后判断中间有多少个不同的字符即可(不用前缀和用其它方法也可以实现)。

代码

class Solution {
    public int countPalindromicSubsequence(String s) {
        char[] arr=s.toCharArray();
        int n=arr.length;
        int[] cnt=new int [26];
        int[][] prefix=new int[n+1][26];
        //prefix[i+1][j]表示nums[0…i]中j出现的次数
        for(int i=0;i<n;i++){
            cnt[arr[i]-'a']++;
            for(int j=0;j<26;j++){
                prefix[i+1][j]=cnt[j];
            }
        }
        int res=0;
        for(int j=0;j<26;j++){
            if(prefix[n][j]-prefix[0][j]>0){
                int l=0,r=n-1;
                while(arr[l]-'a'!=j){
                    l++;
                }
                while(arr[r]-'a'!=j){
                    r--;
                }
                if(r-l<2){
                    continue;
                }
                for(int k=0;k<26;k++){
                    if(prefix[r-1+1][k]-prefix[l+1][k]>0){
                        res++;
                    }
                }
            }
        }
        return res;
    }
}

3、1931. Painting a Grid With Three Different Colors

难度:Hard

题目大意:

涂色问题

思路:

暂时不会。

代码

//

4、1932. Merge BSTs to Create Single BST

难度:Hard

题目大意:

详见题目。

思路

暂时不会

代码

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值