1. 程式人生 > 實用技巧 >【力扣】1002. 查詢常用字元

【力扣】1002. 查詢常用字元

給定僅有小寫字母組成的字串陣列 A,返回列表中的每個字串中都顯示的全部字元(包括重複字元)組成的列表。例如,如果一個字元在每個字串中出現 3 次,但不是 4 次,則需要在最終答案中包含該字元 3 次。

你可以按任意順序返回答案。

示例 1:

輸入:["bella","label","roller"]
輸出:["e","l","l"]
示例 2:

輸入:["cool","lock","cook"]
輸出:["c","o"]

提示:

1 <= A.length <= 100
1 <= A[i].length <= 100
A[i][j] 是小寫字母

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/find-common-characters

class Solution {
    public List<String> commonChars(String[] A) {
        Map<Character,Integer> map = new HashMap<Character,Integer>();

        for(int j =0; j < A[0].length(); j++){
            map.put(A[0].charAt(j),map.getOrDefault(A[0].charAt(j),0)+1);
        }

        
for(int i = 1; i < A.length; i++){ Map<Character,Integer> tempMap = new HashMap<Character,Integer>(); for(int j =0; j < A[i].length(); j++){ tempMap.put(A[i].charAt(j),tempMap.getOrDefault(A[i].charAt(j),0)+1); } map.forEach((key,value)
-> { Integer tempValue = tempMap.get(key) == null ? 0 : tempMap.get(key); if(value > tempValue){ map.put(key,tempValue); } }); } List<String> result = new ArrayList<>(); map.forEach((key,value) -> { if(value != 0){ for(int i = 0; i < value; i++){ result.add(key+""); } } }); return result; } }
執行用時:28 ms, 在所有Java提交中擊敗了9.31%的使用者 記憶體消耗:38.7 MB, 在所有Java提交中擊敗了95.48%的使用者

問題點:使用了多個map,空間複雜度高

優化方式:使用簡單陣列能夠比map更節省空間