leetcode 查找常用字符

1002. 查找常用字符

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

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

示例 1:

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

示例 2:

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

提示:

  1. 1 <= A.length <= 100
  2. 1 <= A[i].length <= 100
  3. A[i][j] 是小写字母

思路解析:只是需要找到每个字符串中都包含的字母,看样例1,可知即使是重复的字母出现多次也会在结果集中。我们可以建一个整型数组大小为26。每一位都代表着一个字母,通过索引来进行表示。在从把每一个单词从数组中读出,用这个数组来装这个单词所有的字母,重复字母会在该索引下数组值位2以上。这个就是比较组,在建一个一样的数组,每次进行对后续单词内容的存放。用这两个数组进行比较,把数组中索引不为0的进行比较,可以找到重复项,把0与非0项相比去掉不符合要求的字母。

 1 class Solution {
 2     public List<String> commonChars(String[] A) {
 3         List s=new LinkedList();
 4         int sz[]=new int[26];
 5         int sz1[]=new int[26];
 6         for (int i = 0; i < A[0].length(); i++) {
 7             int n=(int) (A[0].charAt(i)-'a');
 8             sz[n]++;
 9         }
10         for (int i = 1; i < A.length; i++) {
11             for (int i1 = 0; i1 < A[i].length(); i1++) {
12                 int n=(int) (A[i].charAt(i1)-'a');
13                 sz1[n]++;
14             }
15             for (int i1 = 0; i1 < sz.length; i1++) {
16                 if(sz1[i1]==0){
17                     sz[i1]=0;
18                 }
19                 if (sz[i1]==0){
20                     sz1[i1]=0;
21                 }
22                 if(sz1[i1]!=0&&sz[i1]!=0){
23                     if(sz[i1]>sz1[i1]){
24                         sz[i1]=sz1[i1];
25                     }
26                 }
27             }
28             sz1=null;
29             sz1=new int[26];
30 
31         }
32         for (int i = 0; i < sz.length; i++) {
33             if(sz[i]!=0){
34                 for (int i1 = 0; i1 < sz[i]; i1++) {
35                     s.add((char)('a'+i));
36                 }
37             }
38         }
39 
40         return s;
41     }
42 }

猜你喜欢

转载自www.cnblogs.com/hwhWorld/p/10465079.html