给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 3 次。
你可以按任意顺序返回答案。
提示:
- 1 <= A.length <= 100
- 1 <= A[i].length <= 100
- A[i][j] 是小写字母
class Solution {
public List<String> commonChars(String[] A) {
if (A == null || A.length == 0) return new ArrayList<>();
int[] hash = new int[26];
//先记录A数组第一个字符串的所有字符个数
for (char c : A[0].toCharArray()) {
//hash数组中对应的位置加1
hash[c - 'a']++;
}
//从第二个字符串开始,比较出现的最小个数
for (int i = 1; i < A.length; i++) {
//把比较的字符串的字符个数临时存放tempHash
int[] tempHash = new int[26];
for (char c : A[i].toCharArray()) {
tempHash[c - 'a']++;
}
//然后比较hash数组和tempHash数组的最小出现个数,放到hash数组中
for (int j = 0; j < tempHash.length; j++) {
if (tempHash[j] < hash[j]) {
hash[j] = tempHash[j];
}
}
}
//此时,hash数组中,不为0的数即使结果,按数组中内容的个数存放到res中
List<String> res = new ArrayList<>();
for (int i = 0; i < hash.length; i++) {
//如果位置大于0,按hash数组的内容进行多次存放
if (hash[i] > 0) {
for (int j = 0; j < hash[i]; j++) {
//先转回char类型,再变为String存入res中
res.add(String.valueOf((char) (i + 'a')));
}
}
}
return res;
}
}