力扣周赛 第282场 Java题解

?:博客首页: 进击的波吉
?:今日分享的文章: 力扣周赛 第282场 Java题解
?:坚持刷力扣,分享前三题题解?
?:Boji 还在努力学算法 ,如有疑问、疏漏之处,请多多指点?
☀️:自学成长的路上,感谢大家相伴!No hurry , No Pause !?

6008. 统计包含给定前缀的字符串

⭐️ 思路

  1. **原思路:**取出每个字符串,分别匹配每个字符
  2. 优化后: 利用 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版权协议,转载请附上原文出处链接和本声明。