题目
- 两句话中的不常见单词
给定两个句子 A 和 B 。 (句子是一串由空格分隔的单词。每个单词仅由小写字母组成。)
如果一个单词在其中一个句子中只出现一次,在另一个句子中却没有出现,那么这个单词就是不常见的。
返回所有不常用单词的列表。
您可以按任何顺序返回列表。
题解
这道题其实是找出A+B中出现一次的单词
解法一
想到了Set集合可以去掉重复元素的特点,所以采用Set集合进行。
class Solution {
List<String> ans=new ArrayList<>();
public String[] uncommonFromSentences(String A, String B) {
Set<String> st=new HashSet<>();
String[] stA=A.split(" ");
String[] stB=B.split(" ");
int n=st.size();
for(String s:stA){
ans.add(s);
st.add(s);
if(n==st.size()){
ans.remove(s);
ans.remove(s);
}
n=st.size();
}
for(String s:stB){
ans.add(s);
st.add(s);
if(n==st.size()){
ans.remove(s);
ans.remove(s);
}
n=st.size();
}
return ans.toArray(new String[ans.size()]);
}
}
其中,List转数组,采用toArray方法,由于String是引用类型,所以注意要new String[]。
解法二
用Map的键值对,其中,获取某个Key的Value,采用getOrDefault()方法,从而实现在原有的Value上加1。
class Solution {
List<String> ans=new ArrayList<>();
public String[] uncommonFromSentences(String A, String B) {
Map<String, Integer> count = new HashMap();
for (String word: A.split(" "))
count.put(word, count.getOrDefault(word, 0) + 1);
for (String word: B.split(" "))
count.put(word, count.getOrDefault(word, 0) + 1);
List<String> ans = new LinkedList();
for (String word: count.keySet())
if (count.get(word) == 1)
ans.add(word);
return ans.toArray(new String[ans.size()]);
}
}