1002. Find Common Characters
Given a string array words, return an array of all characters that show up in all strings within the words (including duplicates). You may return the answer in any order.
Example 1:
Input: words = ["bella","label","roller"]
Output: ["e","l","l"]
Example 2:
Input: words = ["cool","lock","cook"]
Output: ["c","o"]
Constraints:
1 <= words.length <= 100
1 <= words[i].length <= 100
words[i] consists of lowercase English letters.
逻辑分析:
以数组的形式存放每个字符出现的次数,获取出现的最少次数。还大于0的,则为共有的,注意
特别处理出现多次的字符。
1.为了比较每次出现最少的次数,所以将第一个单词的字符先放入,作为比较对象。
2.依次统计其他单词的字符,并与第一个单词的数组比较,并将结果写会第一个数组。
JAVA代码实现:
class Solution {
public List<String> commonChars(String[] words) {
int[] hash = new int[26];
List<String> result = new ArrayList<>();
//放入第一个字符串
String word = words[0];
char[] charArray = word.toCharArray();
for(int i=0;i<charArray.length;i++){
hash[charArray[i]-'a']+=1;
}
//放入其他的,比较获取最小的
for(int i=1;i<words.length;i++){
int[] otherWordHash = new int[26];
word = words[i];
charArray = word.toCharArray();
for(int j=0;j<charArray.length;j++){
otherWordHash[charArray[j]-'a']+=1;
}
for(int j=0;j<26;j++){
hash[j]=Math.min(hash[j],otherWordHash[j]);
}
}
for(int i=0;i<hash.length;){
if(hash[i]>0){
char c = (char) ('a'+i);
result.add(String.valueOf(c));
hash[i]--;
}else{
i++;
}
}
return result;
}
}