這是悅樂書的第375次更新,第402篇原創
java
今天介紹的是LeetCode
算法題中Easy
級別的第236
題(順位題號是1002
)。給定僅由小寫字母組成的字符串A
,返回列表中全部字符串都有顯示的字符的列表(包括重複字符)。例如,若是一個字符在全部字符串中出現3次但不是4次,則須要在最終答案中包含該字符三次。算法
你能夠按任何順序返回答案。例如:數組
輸入:["bella","label","roller"]
輸出:["e","l","l"]數據結構
輸入:["cool","lock","cook"]
輸出:["c","o"]code
注意:字符串
1 <= A.length <= 100class
1 <= A[i].length <= 100數據結構與算法
A[i][j]是一個小寫字母。
List
題目的意思是找A中全部字符串共有的字符,即全部字符串的字符交集。好比示例中第一個字符串數組["bella","label","roller"]
,"bella"
和"label"
的字符交集是{'a','b','e','l','l'}
,"label"
和"roller"
的字符交集是{'e','l','l'}
,而{'a','b','e','l','l'}
和{'e','l','l'}
的交集是{'e','l','l'}
,因此最後的結果是["e","l","l"]
。循環
思路:使用一個26
個長度的int
數組count
,初始值設爲整型最大值,循環處理A
中的字符串,藉助26
個長度的int
數組tem
,將每一個字符串中的字符出現次數記數,而後比較count
和tem
中對應位的元素值大小(字符出現次數),取較小(求交集)的一個從新賦值給count
中的對應位,最後將count
數組中大於0的數轉成字符串添加到List
中去。
public List<String> commonChars(String[] A) { List<String> result = new ArrayList<String>(); int[] count = new int[26]; for (int i=0; i<26; i++) { count[i] = Integer.MAX_VALUE; } for (String str : A) { int[] tem = new int[26]; for (int j=0; j<str.length(); j++) { tem[str.charAt(j)-'a']++; } for (int k=0; k<26; k++) { count[k] = Math.min(count[k], tem[k]); } } for (int i=0; i<26; i++) { while (count[i]-- > 0) { result.add((char)(i+'a')+""); } } return result; }
算法專題目前已連續日更超過七個月,算法題文章242+篇,公衆號對話框回覆【數據結構與算法】、【算法】、【數據結構】中的任一關鍵詞,獲取系列文章合集。
以上就是所有內容,若是你們有什麼好的解法思路、建議或者其餘問題,能夠下方留言交流,點贊、留言、轉發就是對我最大的回報和支持!