LeetCode126周赛-1002. 查找常用字符-Java实现

题目链接

结果

在这里插入图片描述
题目如下:

给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 3 次。

输入:["bella","label","roller"]
输出:["e","l","l"]

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

你可以按任意顺序返回答案。
代码如下:

import java.util.ArrayList;
import java.util.List;
class Solution {
    public List<String> commonChars(String[] A) {
        List<String> list = new ArrayList<>();

        if(A==null || A.length<=0){
             return list;
         }

         int[] chars = new int[26];
         for(int i = 0;i < 26;i++){
             chars[i] = Integer.MAX_VALUE;
         }

         for(String str : A){
             char[] content = str.toCharArray();
             int[] charsTemp = new int[26];
             for(char c : content){
                 charsTemp[c-97]++;
             }
             for(int i = 0;i < 26;i++){
                 if(charsTemp[i] < chars[i]){
                     chars[i] = charsTemp[i];
                 }
             }
         }

         for(int i = 0;i < chars.length;i++){
             for(int k = 0; k < chars[i];k++){
                 list.add((char) (i+'a')+"");
             }
         }
         return list;
     }
   
}

过程

因为时间原因没有比赛,但是今天看专栏看了看线性排序,里面有一个计数排序用在这个上面感觉很搭,所以试了试。
我先申请了一个代表26个字母的int数组,数组每个元素代表当前字母(index+‘a’)的数量。然后遍历给定的字符串数组,在每一个字符串数组中同样申请一个临时的26个字母的int数组,在对这个字符串的每一个字母遍历后,拿新申请的数组与开始申请的数组对应元素(相同下标)进行比较,如果哪个数字小就用谁(题目要求,如果一个字母在所有字符串出现了至少n次,比如aaab、aaaaac、aad,这里a在每一个字符串里至少出现了2次,所以在int数组‘a’所对应的下标中填2,所以谁小就用谁)。

猜你喜欢

转载自blog.csdn.net/ws948342046/article/details/88172429
今日推荐