😊博主目前也在学习,有错误欢迎指正😊
🌈保持热爱 奔赴星海🌈
一、题目
1、题目描述
句子 是一串由空格分隔的单词。每个 单词 仅由小写字母组成。
如果某个单词在其中一个句子中恰好出现一次,在另一个句子中却 没有出现 ,那么这个单词就是 不常见的 。
给你两个 句子 s1 和 s2 ,返回所有 不常用单词 的列表。返回列表中单词可以按 任意顺序 组织。
2、基础框架
- Java版本框架代码如下:
class Solution {
public String[] uncommonFromSentences(String s1, String s2) {
}
}
3、原题链接
二、解题报告
1、思路分析
(1)将两个字符串分别以空格分隔开,分成字符串数组。
(2)定义两个哈希表,分别记录当前单词在句子中出现的次数是否大于一次。
(3)分别遍历两个字符串数组,判断数组中的元素是否是不常见的。
2、代码详解
class Solution {
public String[] uncommonFromSentences(String s1, String s2) {
ArrayList<String> list = new ArrayList();
String[] c1 = s1.split(" ");
String[] c2 = s2.split(" ");
Map<String,Integer> map1 = new HashMap();
Map<String,Integer> map2 = new HashMap();
for(int i = 0;i < c1.length;i++) {
if(!map1.containsKey(c1[i])) {
map1.put(c1[i],0);
}else {
map1.put(c1[i],1);
}
}
for(int i = 0;i < c2.length;i++) {
if(!map2.containsKey(c2[i])) {
map2.put(c2[i],0);
}else {
map2.put(c2[i],1);
}
}
for(int i = 0;i < c1.length;i++) {
if(map1.containsKey(c1[i]) && map1.get(c1[i]) == 0 && !map2.containsKey(c1[i])) {
list.add(c1[i]);
}
}
for(int i = 0;i < c2.length;i++) {
if(map2.containsKey(c2[i]) && map2.get(c2[i]) == 0 && !map1.containsKey(c2[i])) {
list.add(c2[i]);
}
}
String[] res = new String[list.size()];
return list.toArray(res);
}
}
三、本题知识
哈希表