leetcode刷題之1160拼寫單詞 java題解(超詳細)

太陽石笑笑發表於2020-11-21

題目如下圖所示:
在這裡插入圖片描述
一開始有點懵,然後想著暴力求解的話,用words裡面的每個單詞去chars裡面去查詢,如果全都找到了就加一,好像有點蠢,後面參考了一下網上的一些想法,去比較words裡面每個字母的個數,是不是比chars裡面字母的個數小或者等於,是的話,就能組成

自己試了一下,還可以:

public int countCharacters(String[] words, String chars) {
        Map<Character, Integer> map = new HashMap<>();
        int realResult = 0;
        boolean[] isInclude = new boolean[words.length];
        for (int i = 0; i < words.length; i++) {
            isInclude[i] = true;
        }
        char[] charArray = chars.toCharArray();
        for (int i = 0; i < charArray.length; i++) {
            map.put(charArray[i], map.getOrDefault(charArray[i], 0) + 1);
        }

        for(int i = 0; i < words.length; ++i) {
            char[] stemp = words[i].toCharArray();
            Map<Character, Integer> tempMap = new HashMap<>();
            for(int j = 0; j < stemp.length; ++j) {
                tempMap.put(stemp[j], tempMap.getOrDefault(stemp[j], 0) + 1);
                if(!map.containsKey(stemp[j])) {
                    isInclude[i] = false;
                    break;
                }
            }
            for(int j = 0; j < stemp.length; ++j) {
                if(!isInclude[i]) {
                    break;
                }
                if(map.containsKey(stemp[j]) && map.get(stemp[j]) < tempMap.get(stemp[j])) {
                    isInclude[i] = false;
                    break;
                }
            }

        }
        for (int i = 0; i < words.length; i++) {
            if(isInclude[i]) {
                realResult += words[i].length();
            }
        }
        return realResult;
    }
}

一開始只是判斷了是否能夠包括,忘記判斷字母的個數了
這樣寫確實有一點點複雜,不過還好,用了最常見的資料結構

好了,今天先到這裡了

相關文章