给定仅有小写字母组成的字符串数组 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]
是小写字母思路解析:只是需要找到每个字符串中都包含的字母,看样例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 }
原文:https://www.cnblogs.com/hwhWorld/p/10465079.html