給定僅有小寫字母組成的字符串數組 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]
是小寫字母
思路:第一步:每個字符串都是由26個字符構成,所以我們定義兩個整型數組arr(表示最后統計每個字符出現的次數)和array(表示每一個字符串中字符出現的個數),將arr數組初始化為100,array初始化為0;
第二步:遍歷字符數組s,統計該字符串中每個字符出現個數,賦給array(每次統計前將array初始化為0),最后將arr[i] = Math.min(array[i],arr[i]) (由於我們只統計每個字符在每個字符串中出現的次數,所以要取最小值);
第三步:對arr數組進行遍歷,把每個字符添加list集合中;
代碼如下:
public static List<String> commonChars(String[] s) { //定義並初始化兩個數組arr和array
int[] arr = new int[26]; int[] array = new int[26]; for(int i = 0;i<26;i++) { arr[i] = 100; array[i] = 0; } for(String str : s) { //初始化array
for(int i = 0;i<26;i++) { array[i] = 0; } //統計每個字符出現的次數
for(int i = 0;i<str.length();i++) { ++array[str.charAt(i) - 'a']; } //統計每個字符在當前字符串之前所有字符串出現的次數,以出現最少次數為標准賦值
for(int i = 0;i<26;i++) { arr[i] = Math.min(arr[i], array[i]); } } List<String> list = new ArrayList<String>(); //遍歷arr
for(int i = 0;i<26;i++) { //j<arr[i] 判斷每個字符出現個數,然后進行添加
for(int j = 0;j<arr[i];j++) { String ch = ""; ch+=(char)('a'+i); list.add(ch); } } return list; }