摘要:句子是一串由空格分隔的單詞。每個(gè)單詞僅由小寫(xiě)字母組成。如果一個(gè)單詞在其中一個(gè)句子中只出現(xiàn)一次,在另一個(gè)句子中卻沒(méi)有出現(xiàn),那么這個(gè)單詞就是不常見(jiàn)的。返回所有不常用單詞的列表。
前言
LeetCode Weekly Contest 97的第一道題目,分值為3分。原題目要求如下:
</>復(fù)制代碼
給定兩個(gè)句子 A 和 B 。 (句子是一串由空格分隔的單詞。每個(gè)單詞僅由小寫(xiě)字母組成。)如果一個(gè)單詞在其中一個(gè)句子中只出現(xiàn)一次,在另一個(gè)句子中卻沒(méi)有出現(xiàn),那么這個(gè)單詞就是不常見(jiàn)的。
返回所有不常用單詞的列表。
您可以按任何順序返回列表。
示例 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 都只包含空格和小寫(xiě)字母。
解題思路
這個(gè)題目其實(shí)很簡(jiǎn)單,解題步驟如下:
1.先統(tǒng)計(jì)每個(gè)單詞的出現(xiàn)次數(shù),生成以單詞和出現(xiàn)次數(shù)為元素的集合
2.獲取兩個(gè)集合不相交且集合元素中出現(xiàn)次數(shù)為1的元素
以示例1為例子:
獲取到的元素如下:
</>復(fù)制代碼
集合A
[{"this",1},{"apple",1},{"is",1},{"sweet",1}]
集合B
[{"this",1},{"apple",1},{"is",1},{"sour",1}]
2.我取不相交的部分的思路是先取出相交的部分集合C,然后分別取出集合A和集合B中集合C且出現(xiàn)次數(shù)不為1的元素:
</>復(fù)制代碼
集合C
[{"this",1},{"apple",1},{"is",1}]
結(jié)果集合
[{"sweet",1},{"sour",1}]
最后取出結(jié)果集合中的單詞即可
["sweet","sour"]
實(shí)現(xiàn)代碼
</>復(fù)制代碼
public String[] uncommonFromSentences(String A, String B) {
Map mapA = getCountMap(A);
Map mapB = getCountMap(B);
Set set = new HashSet<>();
Set sameSet = new HashSet<>();
//兩個(gè)集合中都出現(xiàn)的單詞
for (String keyA : mapA.keySet()) {
for (String keyB : mapB.keySet()) {
if (keyA.equals(keyB)) {
sameSet.add(keyA);
}
}
}
calDiff(mapA, sameSet, set);
calDiff(mapB, sameSet, set);
return set.toArray(new String[set.size()]);
}
/**
* 返回句子中每個(gè)單詞的出現(xiàn)次數(shù)統(tǒng)計(jì)情況,key為單詞,value為出現(xiàn)次數(shù)
* @param str
* @return
*/
private Map getCountMap(String str) {
Map map = new HashMap<>();
if (str != null && str.length() > 0) {
String[] strs = str.split(" ");
for (String s : strs) {
if (map.containsKey(s)) {
map.put(s, map.get(s) + 1);
} else {
map.put(s, 1);
}
}
}
return map;
}
/**
* 取出Map中不存在重復(fù)集合中的key,且key的value不為1
* @param map
* @param sameSet 重復(fù)集合
* @param set
*/
private void calDiff(Map map, Set sameSet, Set set) {
if (!map.isEmpty()) {
Iterator> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry entry = it.next();
String key = entry.getKey();
if (!sameSet.contains(key) && entry.getValue() == 1) {
set.add(key);
}
}
}
}
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/76705.html
摘要:題目鏈接題目分析返回給定的兩個(gè)句子中唯一不同的單詞。思路先把兩個(gè)句子分別按空格分割成數(shù)組,再計(jì)算兩個(gè)數(shù)組的差集,即可得知兩個(gè)句子的差異。測(cè)試后發(fā)現(xiàn)沒(méi)通過(guò)和這個(gè)測(cè)試組合。系統(tǒng)提示應(yīng)當(dāng)返回。因?yàn)橛昧撕瘮?shù),因此鍵為單詞,值為出現(xiàn)次數(shù)。 884. Uncommon Words from Two Sentences 題目鏈接 884. Uncommon Words from Two Senten...
摘要:應(yīng)直接使用原序列中的結(jié)點(diǎn),返回歸并后的帶頭結(jié)點(diǎn)的鏈表頭指針。要求分別計(jì)算兩個(gè)多項(xiàng)式的乘積與和,輸出第一項(xiàng)為乘積的系數(shù)和指數(shù),第二行為和的系數(shù)和指數(shù)。選定了表示方法后,考慮數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)。選擇鏈表在設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)的時(shí)候有系數(shù)指數(shù)和指針結(jié)構(gòu)指針。 函數(shù)題給出編譯器為 C(gcc) 的解答,編程題給出編譯器 C++(g++) 或 Python(python3) 的解答。 函數(shù)題 兩個(gè)有序鏈表序...
摘要:前言模型作用為提取三元組,基于英文,目前嘗試改為中文。論文題目名稱(chēng)叫代碼地址論文核心論文核心主要解決個(gè)問(wèn)題,一個(gè)是基于動(dòng)詞結(jié)構(gòu)之外的三元組提取,例如形容詞等,二是基于上下文的三元組提取,舉例說(shuō)明。 前言:模型作用為提取三元組,基于英文,目前嘗試改為中文。論文題目名稱(chēng)叫《Open Language Learning for Information Extraction》,代碼地址:h...
閱讀 2401·2021-10-09 09:41
閱讀 3203·2021-09-26 09:46
閱讀 848·2021-09-03 10:34
閱讀 3187·2021-08-11 11:22
閱讀 3381·2019-08-30 14:12
閱讀 721·2019-08-26 11:34
閱讀 3355·2019-08-26 11:00
閱讀 1786·2019-08-26 10:26
极致性价比!云服务器续费无忧!
Tesla A100/A800、Tesla V100S等多种GPU云主机特惠2折起,不限台数,续费同价。
NVIDIA RTX 40系,高性价比推理显卡,满足AI应用场景需要。
乌兰察布+上海青浦,满足东推西训AI场景需要