leetcode888两句话中的不常见单词

题目:

给定两个句子 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 都只包含空格和小写字母。

题解

这道题是leetcode Weekly Contest97周的第一道easy题。题目的意思就是要找出两个字符串中不经常出现的单词,这里的不经常出现是指,在一个句子中只出现了一次,在另外一个句子中没有出现。
我们考虑把字符串分割后的单词放入一个容器,该容器可以直接判断“是否包含”某个元素,字符串分割后的单词放入该容器中,相同的部分放入另一个容器中,则两个容器不同的部分就是不长出现的单词。这个容器我们可以用List,也可以用Set。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class Solution {
public String[] uncommonFromSentences(String A, String B) {
String[] a = A.split(" ");
String[] b = B.split(" ");
HashSet<String> one = new HashSet<>();
HashSet<String> two = new HashSet<>();

List<String> ans = new ArrayList<>();
for (String s: a){
if (one.contains(s)){
two.add(s);
}
one.add(s);
}
for (String s: b){
if (one.contains(s)){
two.add(s);
}
one.add(s);
}
for (String s: one){
if (!two.contains(s)){
ans.add(s);
}
}
String[] res = new String[ans.size()];
int index=0;
for (String s:ans){
res[index++]=s;
}
return res;
}
}