题目要求
给定两个句子 A 和 B 。 (句子是一串由空格分隔的单词。每个单词仅由小写字母组成。)
如果一个单词在其中一个句子中只出现一次,在另一个句子中却没有出现,那么这个单词就是不常见的。
返回所有不常用单词的列表。
您可以按任何顺序返回列表。
示例 1:
输入:A = "this apple is sweet", B = "this apple is sour"
输出:["sweet","sour"]
示例 2:
输入:A = "apple apple", B = "banana"
输出:["banana"]
提示:
0 <= A.length <= 200
0 <= B.length <= 200
A 和 B 都只包含空格和小写字母。
思路分析
利用split函数将每个单词分离,起两个for循环放入hashmap<String,Integer>中,记录单词出现的次数,建立Set将map的key值放入以达到不重复的目的,最后将map中value值为1的key值取出,加到list中,返回list.toArray。
代码实现
public String[] uncommonFromSentences(String A, String B) {
if(A.length()==0 && B.length()==0) return new String[0];
String AStr[] = A.split(" "),BStr[] = B.split(" ");
List<String> list =new ArrayList<>();
Map<String, Integer> map = new HashMap<>();
for (String word : AStr) {
/*if (!map.containsKey(word)) {
map.put(word, 1);
} else {
map.put(word, (map.get(word) + 1));
}*/
//可升级为
map.put(word,map.getOrDefault(word,0)+1);
}
for (String word : BStr) {
map.put(word,map.getOrDefault(word,0)+1);
}
Set<String> set =map.keySet();
for (String word : set){
if(map.get(word)==1){
list.add(word);
}
}
return list.toArray(new String[list.size()]);
}