您的位置:首页 > 其它

LeetCode1002(竞赛题):查找常用字符(给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。)

2019-03-04 19:35 477 查看

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

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

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

总体思路:就是用字符串数组中的第一个字符串去和剩余的字符串比较,找出共有的字符,并计算出最小重复数量,再传到集合中去。

[code]import java.util.*;

public class lianxi{
public static void main(String[] args){
Solution S = new Solution();
String[] A = {"bella","label","roller"};
List<String> list = S.commonChars(A);
System.out.println(list);

}
}

class Solution {
public List<String> commonChars(String[] A) {
List<String> list = new ArrayList<>();
for(int j = 0; j < A[0].length(); j++){
//遍历第一个字符串中的字符
int count = 0;//相同的字符最少重复几次
char c = 'a';
for(int i = 0; i < A.length-1; i++){
//遍历所有字符串
int a = rechecking(A[0].charAt(j),A[i]);
int b = rechecking(A[0].charAt(j),A[i+1]);
c = A[0].charAt(j);
if(a==0||b==0){
//只要a和b等于一次0  直接跳出   将count置零
count =0;
break;
}
if(count == 0){
//找出a和b最小的
if(a >= b){
count = b;
}
else{
count = a;
}
}
else{
//count不等于0  那么就是 a,b,count 三个做比较,找出最小的
if(a >= b){
if(count > b){
count = b;
}
}
else{
if(count > a ){
count = a;
}
}
}

}
if(list.contains(String.valueOf(c)) == false && count > 0 ){
//判断字符是否已存在
while(count > 0){
list.add(String.valueOf(c));
count--;
}
}
}
return list;
}
public int rechecking(char chars, String s){
//用来比较每个字符串中有几个相同的字符
int count = 0;
for(int i = 0; i < s.length(); i++){
if(chars == s.charAt(i)){
count++;
}

}
return count;
}
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐