Welcome to Subscribe On Youtube
884. Uncommon Words from Two Sentences
Description
A sentence is a string of single-space separated words where each word consists only of lowercase letters.
A word is uncommon if it appears exactly once in one of the sentences, and does not appear in the other sentence.
Given two sentences s1
and s2
, return a list of all the uncommon words. You may return the answer in any order.
Example 1:
Input: s1 = "this apple is sweet", s2 = "this apple is sour" Output: ["sweet","sour"]
Example 2:
Input: s1 = "apple apple", s2 = "banana" Output: ["banana"]
Constraints:
1 <= s1.length, s2.length <= 200
s1
ands2
consist of lowercase English letters and spaces.s1
ands2
do not have leading or trailing spaces.- All the words in
s1
ands2
are separated by a single space.
Solutions
-
class Solution { public String[] uncommonFromSentences(String s1, String s2) { Map<String, Integer> cnt = new HashMap<>(); for (String s : s1.split(" ")) { cnt.put(s, cnt.getOrDefault(s, 0) + 1); } for (String s : s2.split(" ")) { cnt.put(s, cnt.getOrDefault(s, 0) + 1); } List<String> ans = new ArrayList<>(); for (var e : cnt.entrySet()) { if (e.getValue() == 1) { ans.add(e.getKey()); } } return ans.toArray(new String[0]); } }
-
class Solution { public: vector<string> uncommonFromSentences(string s1, string s2) { unordered_map<string, int> cnt; auto add = [&](string& s) { stringstream ss(s); string w; while (ss >> w) ++cnt[move(w)]; }; add(s1); add(s2); vector<string> ans; for (auto& [s, v] : cnt) if (v == 1) ans.emplace_back(s); return ans; } };
-
class Solution: def uncommonFromSentences(self, s1: str, s2: str) -> List[str]: cnt = Counter(s1.split()) + Counter(s2.split()) return [s for s, v in cnt.items() if v == 1]
-
func uncommonFromSentences(s1 string, s2 string) (ans []string) { cnt := map[string]int{} for _, s := range strings.Split(s1, " ") { cnt[s]++ } for _, s := range strings.Split(s2, " ") { cnt[s]++ } for s, v := range cnt { if v == 1 { ans = append(ans, s) } } return }
-
function uncommonFromSentences(s1: string, s2: string): string[] { const cnt: Map<string, number> = new Map(); for (const s of [...s1.split(' '), ...s2.split(' ')]) { cnt.set(s, (cnt.get(s) || 0) + 1); } const ans: Array<string> = []; for (const [s, v] of cnt.entries()) { if (v == 1) { ans.push(s); } } return ans; }
-
/** * @param {string} s1 * @param {string} s2 * @return {string[]} */ var uncommonFromSentences = function (s1, s2) { const cnt = new Map(); for (const s of [...s1.split(' '), ...s2.split(' ')]) { cnt.set(s, (cnt.get(s) || 0) + 1); } const ans = []; for (const [s, v] of cnt.entries()) { if (v == 1) { ans.push(s); } } return ans; };
-
use std::collections::HashMap; impl Solution { pub fn uncommon_from_sentences(s1: String, s2: String) -> Vec<String> { let mut map = HashMap::new(); for s in s1.split(' ') { map.insert(s, !map.contains_key(s)); } for s in s2.split(' ') { map.insert(s, !map.contains_key(s)); } let mut res = Vec::new(); for (k, v) in map { if v { res.push(String::from(k)); } } res } }