0
点赞
收藏
分享

微信扫一扫

【每日编程08】拼写单词和一年中的第几天

题目1: 拼写单词

解题思路:
使用哈希表存储chars中每个字母的数量
再使用一个哈希表存储word中每个字母的数量
将这两个哈希表的键值对逐一进行比较

//先来一个比较通俗易懂的代码
class Solution{
    public int countCharacters(String[] words, String chars){
        Map<Character, Integer> charsMap = new HashMap<>();
        int charsLength = chars.length();
        for (int i = 0; i < charsLength; i++){
            char c = chars.charAt(i);
            charsMap.put(c, charsMap.getOrDefault(c, 0) + 1);
        }
        int ans = 0;
        for (String word : words){
            Map<Character, Integer> wordMap = new HashMap<>();
            int wordLength = word.length();
            for (int i = 0; i < wordLength; i++){
                char c = word.charAt(i);
                wordMap.put(c, wordMap.getOrDefault(c, 0) + 1);
            }
            boolean isAns = true;
            for (int i = 0; i < wordLength; ++i){
                char c = word.charAt(i);
                if (charsMap.getOrDefault(c, 0) < wordMap.getOrDefault(c, 0)){
                    isAns = false;
                    break;
                }
            }
            if (isAns){
                ans += word.length();
            }
        }
        return ans;
    }
}
//该代码是以上代码的简写
class Solution {
    public int countCharacters(String[] words, String chars){
        Map<Character, Integer> charsMap = new HashMap<>();
        for(int i = 0; i < chars.length(); i++){
            charsMap.put(chars.charAt(i), charsMap.getOrDefault(chars.charAt(i), 0) + 1);
        }
        int ans = 0;
        for(String word : words){
            Map<Character, Integer> wordMap = new HashMap<>();
            for(int i = 0; i < word.length(); i++){
                wordMap.put(word.charAt(i), wordMap.getOrDefault(word.charAt(i), 0) + 1);
            }
            boolean isAns = true;
            for(int i = 0; i < word.length(); i++){
                if(charsMap.getOrDefault(word.charAt(i), 0) < wordMap.getOrDefault(word.charAt(i), 0)){
                    isAns = false;
                    break;
                }
            }
            if(isAns){
                ans += word.length();
            }
        }
        return ans;
    }
}

题目2: 一年中的第几天

解题思路:
1.使用substring根据字符串的特点拆分出年月日
2.判断是否是闰年

class Solution {
    public int dayOfYear(String date) {
        int year = Integer.parseInt(date.substring(0, 4));
        int month = Integer.parseInt(date.substring(5, 7));
        int day = Integer.parseInt(date.substring(8));
        int[] monthArray = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        if((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)){
            monthArray[1] = 29;
        }
        int sum = 0;
        for(int i = 0; i < month - 1; i++){
            sum += monthArray[i];
        }
        sum += day;
        return sum;
    }
}
举报

相关推荐

0 条评论