查找常用字符

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

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

示例 1:

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

输入:["cool","lock","cook"]
输出:["c","o"]
 思路
1.建立两个数组,一个数组ans[i]初始化=max,一个数组temp[i]初始化=0

2.temp[ ]数组存放通过ASCII值将字符保存在int[]类型的数组中,

比如temp[0]=3;对应的意思为0是字符‘a’,3代表‘a’出现了3次

temp[1]=3;对应的意思为1是字符‘b’,3代表‘b’出现了3次

temp[2]=0;对应的意思为2是字符‘c’,0代表没有出现

以此类推

3.ans[ ]数组不断保存每个单词共有出现次数的最大值

扫描二维码关注公众号,回复: 7322772 查看本文章

具体测试
package test99;
import java.util.*;
public class Solution {
public static List<String> commonChars(String[] A){
//初始化ans[]=max,temp[]=0
int[] ans=new int[26];
for(int i=0;i<26;i++) ans[i]=Integer.MAX_VALUE;//注意赋值for each不能用
for(String str:A) {
int[] temp=new int[26];
//再开始拆分成字符
for(char c:str.toCharArray()) {
temp[c-'a']++;
}
for(int i=0;i<26;i++) {
ans[i]=Math.min(ans[i], temp[i]);
}
}
List<String> list=new ArrayList<>();
for(int i=0;i<26;i++) {
while(ans[i]>0) {
list.add(""+(char)('a'+i));
ans[i]--;
}
}
return list;

}
public static void main(String[] args) {
String[] array= {"bella","label","roller"};
List<String> list=new ArrayList<>();
list.add("a");
System.out.println(list);

List<String> list2=commonChars(array);
System.out.println(list2);

}

}
说明 
由于题目要求返回List<String>,采用建立实例list来保存结果

List<String> list=new ArrayList<>();
for(int i=0;i<26;i++) {
while(ans[i]>0) {
list.add(""+(char)('a'+i));
ans[i]--;
}
}

猜你喜欢

转载自blog.51cto.com/14549753/2439379