两句话中的不常见单词(Uncommon Words from Two Sentences)java

两句话中的不常见单词(Uncommon Words from Two Sentences)java

题干

给定两个句子 A 和 B 。 (句子是一串由空格分隔的单词。每个单词仅由小写字母组成。)
如果一个单词在其中一个句子中只出现一次,在另一个句子中却没有出现,那么这个单词就是不常见的。
返回所有不常用单词的列表。
您可以按任何顺序返回列表。

示例 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 都只包含空格和小写字母。

分析

这是leetcode上周周赛的第一道题,其实这个思路很简单。
首先他要求在其中一个句子中出现一次,在另一个句子中没有出现,那么说白了就是在所有单词中只出现一次,这样的单词找出来就ok。我是用set集合,使用set集合的内容不重复的特性来判重。使用两个set集合,用一个集合将所有单词存进去一次(出现过的值),如果重复了就装进第二个集合(重复出现的值)中,最后将在第一个集合中出现的第二个集合里的值删掉就是最终的结果。

代码


 public String[] uncommonFromSentences(String A, String B) {
        String[] stringsA = A.split(" ");
        //将所有单词记录一遍
        Set<String> stringSet = new HashSet<>();
        //记录重复的
        Set<String> replace = new HashSet<>();
        for (String a : stringsA) {
           if (!stringSet.add(a)) {
               replace.add(a);
           }
        }
        String [] stringsB = B.split(" ");
        for (String b : stringsB) {
            if (!stringSet.add(b)) {
                replace.add(b);
            }
        }
        //从一遍中删除掉重复的
        for (String rep : replace) {
            if (stringSet.contains(rep)) {
                stringSet.remove(rep);
            }
        }
        //赋值给string数组
        String[] result = new String[stringSet.size()];
        int[] index = {0};
        stringSet.forEach(s -> {
            result[index[0]] = s;
            index[0]++;
        });

        return result;
    }

运行结果

这里写图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值