LeetCode:884.两句化中的不常见单词

题目:

给定两个句子 A 和 B 。 (句子是一串由空格分隔的单词。每个单词仅由小写字母组成。)

如果一个单词在其中一个句子中只出现一次,在另一个句子中却没有出现,那么这个单词就是不常见的。

返回所有不常用单词的列表。

您可以按任何顺序返回列表。


示例 1:

输入:A = "this apple is sweet", B = "this apple is sour"
输出:["sweet","sour"]
示例 2:

输入:A = "apple apple", B = "banana"
输出:["banana"]

源码:

方法一:

class Solution {
    public String[] uncommonFromSentences(String A, String B) {
        Map<String, Integer> map1 = new HashMap<>();
        Map<String, Integer> map2 = new HashMap<>();
        // 风别将两句话中的单词以及出现次数加入 map1 和 map2 之中
        for (String s : A.split(" ")) {
            map1.put(s, map1.getOrDefault(s, 0) + 1);
        }
        for (String s2 : B.split(" ")) {
            map2.put(s2, map2.getOrDefault(s2, 0) + 1);
        }
        // sb 字符串保存的是两句话所有的单词
        StringBuilder sb = new StringBuilder(A);
        sb.append(" " + B);
        String[] tmp = sb.toString().split(" ");
        // res 用来保存符合题目要求的单词
        StringBuilder res = new StringBuilder();
        int count = 0;
        for (String str : tmp) {
            if (map1.containsKey(str)) {
                if (map1.get(str)==1&&(!map2.containsKey(str))) {
                    res.append(str + " ");
                    count++;
                }
            } else {
                if (map2.containsKey(str)) {
                    if (map2.get(str) == 1) {
                        res.append(str + " ");
                        count++;
                    }
                }
            }
        }
        // count 为 0 说明两句话中都没有符合不常见单词要求的单词
        if (count == 0) {
            // 那么就返回空字符串数组
            return new String[0];
        }
        return res.toString().split(" ");
    }
}

方法二:

class Solution {
    public String[] uncommonFromSentences(String A, String B) {
        Map<String, Integer> map = new HashMap<>();
        StringBuilder sb = new StringBuilder(A);
        sb.append(" " + B);
        String[] s = sb.toString().split(" ");
        for (String str : s) {
            map.put(str, map.getOrDefault(str, 0) + 1);
        }
        StringBuilder res = new StringBuilder();
        int count = 0;
        for (String s2 : map.keySet()) {
            if (map.get(s2) == 1) {
                res.append(s2 + " ");
                count++;
            }
        }
        if (count == 0) {
            return new String[0];
        }
        return res.toString().split(" ");
    }
}
发布了340 篇原创文章 · 获赞 2 · 访问量 8287

猜你喜欢

转载自blog.csdn.net/qq_45239139/article/details/104077771
今日推荐