https://leetcode-cn.com/problems/find-common-characters/
今天开始字符串、哈希表相关的题目,有点难搞,因为对于字符串的操作知识还一点都不懂,所以得一点点积累了。
出现问题:
解决方案:table是字符型,因此编码也要用字符型
class Solution {
public List<String> commonChars(String[] words) {
//List可以用add方法来添加,也就是说当得到重复字符的时候,直接用List.add()即可
//words.length可以得到字符个数
//words[].length可以得到字符长度
//因为是小写字母,所以只有26个,可以用数组代替哈希表
//思路:每个字符串中字母最少的出现次数作为哈希表的更新
List list = new ArrayList<String>();
int[] table = new int[26];
int[] table1 = new int[26];
for(int i = 0; i < words[0].length(); i++){
//table是字符型,因此编码也要用字符型
//table[words[0][i] - 'a']++;
table[words[0].charAt(i) - 'a']++;
}
for(int i = 1; i < words.length; i++){
//注意只有一个字符数组时的处理
for(int j = 0; j < words[i].length(); j++){
table1[words[i].charAt(j) - 'a']++;
}
//更新哈希表
for(int j = 0; j < 26; j++){
table[j] = Math.min(table[j], table1[j]);
}
table1 = new int[26];//一遍之后表要作废刷新
}
//根据哈希表返回重复的字符
for(int i = 0; i < 26; i++){
if(table[i] != 0){
for(int j = 0; j < table[i]; j++){
list.add((char)(i + 'a'));
}
}
}
return list;
}
}