题目链接: 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
题目大意:
详见题目。
思路
暂时不会
代码
//