原题:
力扣https://leetcode-cn.com/problems/find-common-characters/submissions/
一、题目要求给你一个字符串数组 words ,请你找出所有在 words 的每个字符串中都出现的共用字符( 包括重复字符),并以数组形式返回。你可以按 任意顺序 返回答案。
示例 1:
输入:words = ["bella","label","roller"]
输出:["e","l","l"]
示例 2:
输入:words = ["cool","lock","cook"]
输出:["c","o"]
提示:
1 <= words.length <= 1001 <= words[i].length <= 100words[i] 由小写英文字母组成
二、解题package com.leetcode.string;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class Solution11 {
public static void main(String[] args) {
String[] words = {"cool","lock","cook"};
System.out.println(commonChars(words));
}
public static List commonChars(String[] words) {
List> list = new ArrayList>();
for (String word:words) {
HashMap map = new HashMap();
for (int i = 0; i < word.length(); i++) {
char c = word.charAt(i);
if (map.containsKey(c)) {
map.put(c, map.get(c) + 1);
} else {
map.put(c, 1);
}
}
list.add(map);
}
ArrayList l = new ArrayList();
for (char c = 'a'; c <= 'z'; c++){
int min = 0; // 找最少出现的次数
int count2 = 0;
for (HashMap map:list) {
Integer count = map.get(c);
if (count == null) {
min = 0;
count2++;
break;
}
if (count2 == 0) {
min = count;
}
min = Math.min(min, count);
count2++;
}
for (int i = 0; i < min; i++) {
l.add(c + "");
}
}
return l;
}
}
三、运行结果
四、提交结果



