天天看點

LeetCode.1002-尋找共有字元(Find Common Characters)

這是悅樂書的第375次更新,第402篇原創

01 看題和準備

今天介紹的是

LeetCode

算法題中

Easy

級别的第

236

題(順位題号是

1002

)。給定僅由小寫字母組成的字元串

A

,傳回清單中所有字元串都有顯示的字元的清單(包括重複字元)。例如,如果一個字元在所有字元串中出現3次但不是4次,則需要在最終答案中包含該字元三次。

你可以按任何順序傳回答案。例如:

輸入:["bella","label","roller"]

輸出:["e","l","l"]

輸入:["cool","lock","cook"]

輸出:["c","o"]

注意:

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

02 解題

題目的意思是找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;
}
           

03 小結

算法專題目前已連續日更超過七個月,算法題文章242+篇,公衆号對話框回複【資料結構與算法】、【算法】、【資料結構】中的任一關鍵詞,擷取系列文章合集。

以上就是全部内容,如果大家有什麼好的解法思路、建議或者其他問題,可以下方留言交流,點贊、留言、轉發就是對我最大的回報和支援!