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