?:博客首页: 进击的波吉
?:今日分享的文章:力扣周赛 第282场 Java题解
?:坚持刷力扣,分享前三题题解?
?:Boji 还在努力学算法 ,如有疑问、疏漏之处,请多多指点?
☀️:自学成长的路上,感谢大家相伴!No hurry , No Pause !?
6008. 统计包含给定前缀的字符串
⭐️ 思路
:
- **原思路:**取出每个字符串,分别匹配每个字符
- 优化后: 利用 Java String indexOf() 方法 :
int indexOf(String str, int fromIndex): 返回从 fromIndex 位置开始查找指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。
原思路
class Solution {
public int prefixCount(String[] words, String pref) {
if (words == null) return 0 ;
int len = pref.length() ;
int res =0 ;
for (String s : words) {
int count = 0 ;
if (s.length()< len ) continue ;
for (int j = 0; j< len; j++) {
if (s.charAt(j) == pref.charAt(j)) {
count++ ;
}
if (count == len) res++ ;
}
}
return res ;
}
}
优化后
public int prefixCount(String[] words, String pref) {
int ans = 0;
for(String w: words)
ans += (w.indexOf(pref) == 0) ? 1 : 0;
return ans;
}
6009. 使两字符串互为字母异位词的最少步骤数
⭐️主要思路
: 数组模拟 ,原题目描述的很麻烦,真实题意
只需要记录每个字符出现的次数差,最后相加即可!
class Solution {
public int minSteps(String s, String t) {
int[] ans = new int[26] ;
for (char c : s.toCharArray()) {
ans[c-'a']++ ;
}
for (char c : t.toCharArray()) {
ans[c-'a']-- ;
}
int res = 0 ;
for (int i : ans) res += Math.abs(i) ;
return res ;
}
}
6010. 完成旅途的最少时间
⭐️主要思路:
思路都写题解上了!
class Solution {
public long minimumTime(int[] time, int totalTrips) {
long res =-1;
long left = 1, right = 100000000000001L ;
//利用二分缩小取值范围
while( left <= right ) {
long mid = left + (right - left) /2 ;//避免溢出
long total_time = 0 ;
for (int t : time) {//强化for循环,求出每次 t = mid ,最多的趟数
total_time += mid/t ;
}
//表明总趟数 >= totalTrips
if(total_time >= totalTrips) {
res = mid ;
right = mid -1 ; //总趟数过大,取mid左边情况
} else {
left = mid +1 ;//总趟数过小,取mid右边情况
}
}
return res ;
}
}
版权声明:本文为qq_51451731原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。