884_两句话中的不常见单词

难度:简单

题目

句子 是一串由空格分隔的单词。每个 单词 仅由小写字母组成。

如果某个单词在其中一个句子中恰好出现一次,在另一个句子中却 没有出现 ,那么这个单词就是 不常见的 。

给你两个 句子 s1s2 ,返回所有 不常用单词 的列表。返回列表中单词可以按 任意顺序 组织。

示例

示例一:

输入:s1 = “this apple is sweet”, s2 = “this apple is sour”
输出:[“sweet”,”sour”]

示例二:

输入:s1 = “apple apple”, s2 = “banana”
输出:[“banana”]

提示

  • 1 <= s1.length, s2.length <= 200
  • s1s2 由小写英文字母和空格组成
  • s1s2 都不含前导或尾随空格
  • s1s2 中的所有单词间均由单个空格分隔

解题

这道题根据题目意思,只要返回在两个句子中只出现一次的单词即可,所以可以用 HashMap 来记录单词和出现的次数。

为了简化计算,可以将两个 String 串用空格拼接起来 String[] ab = (s1+" "+s2).split(" ");

遍历单词,将单词和出现的次数 put 进去

1
2
3
4
Map<String, Integer> map = new HashMap<>();
for (String i: ab){
map.put(i,map.getOrDefault(i,0)+1);
}

然后统计出只出现一次的单词

1
2
3
4
5
6
List<String> list = new ArrayList<>();
for (String key:map.keySet()){
if (map.get(key)==1){
list.add(key);
}
}

最后返回结果

1
2
String[] ans = new String[list.size()];
return list.toArray(ans);

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public String[] uncommonFromSentences(String s1, String s2) {
String[] ab = (s1+" "+s2).split(" ");
Map<String, Integer> map = new HashMap<>();
for (String i: ab){
map.put(i,map.getOrDefault(i,0)+1);
}
List<String> list = new ArrayList<>();
for (String key:map.keySet()){
if (map.get(key)==1){
list.add(key);
}
}
String[] ans = new String[list.size()];
return list.toArray(ans);
}