为了账号安全,请及时绑定邮箱和手机立即绑定

Java | 如何从字符串中删除常见单词,然后连接不常见单词?

Java | 如何从字符串中删除常见单词,然后连接不常见单词?

慕侠2389804 2021-05-10 17:18:27
在一次采访中有人问我,你有两个段落P1 = I am Lalit P2 = Lalit Kumar现在找到普通单词,而不是字符,然后仅打印不常见的单词。Ex: I am Kumar解决这个问题的最佳方法是什么?
查看完整描述

3 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

这可能是一个矫kill过正,但是我将两个字符串分割,将它们收集为一个LinkedHashMap(以保留原始顺序),并计算每个字符串出现多少次,然后过滤掉非唯一条目:


String p1 = "I am Lalit";

String p2 = "Lalit Kumar";


String result =

    Stream.concat(Arrays.stream(p1.split("\\s")), Arrays.stream(p2.split("\\s")))

          .collect(Collectors.groupingBy(Function.identity(), 

                                         LinkedHashMap::new,

                                         Collectors.counting()))

          .entrySet()

          .stream()

          .filter(e -> e.getValue() == 1)

          .map(Map.Entry::getKey)

          .collect(Collectors.joining(" "));


查看完整回答
反对 回复 2021-05-19
?
呼唤远方

TA贡献1856条经验 获得超11个赞

试试下面的代码:


public static void main(String[] args) {

  String str1 = "I am Lalit";

  String str2 = "Lalit Kumar";


  List<String> set1 = new ArrayList<>(Arrays.asList(str1.split(" ")));


  for (String s : Arrays.asList(str2.split(" "))) {

    if (set1.contains(s)) set1.remove(s);

    else set1.add(s);

  }


  System.out.println(String.join(" ", set1));

}


查看完整回答
反对 回复 2021-05-19
?
手掌心

TA贡献1942条经验 获得超3个赞

你可以做这样的事情...


public static void printUncommon(String s1, String s2) {

        String[] a = s1.split(" ");

        String[] b = s2.split(" ");

        Arrays.sort(a);

        Arrays.sort(b);

        int n1 = a.length;

        int n2 = b.length;

        int i = 0;

        int j = 0;

        while(i < n1 && j < n2) {

            int compare = a[i].compareToIgnoreCase(b[j]);

            if(compare == 0) {

                i++;

                j++;

            }

            else if(compare < 0) {

                System.out.println(a[i]);

                i++;

            }

            else if(compare > 0) {

                System.out.println(b[j]);

                j++;

            }

        }

        if(i == n1) {

            while(j < n2) {

                System.out.println(b[j]);

                j++;

            }

        }

        else if(j == n2) {

            while(i < n1) {

                System.out.println(a[i]);

                i++;

            }

        }

    }

因此,考虑到数组a和的大小b,可以说这种算法的运行效率为O(n1 + n2),其中我们不包括排序时间和比较字符串所花费的时间。


我希望你能理解算法。如果没有,请告诉我,我会逐步指导您。干杯!


查看完整回答
反对 回复 2021-05-19
  • 3 回答
  • 0 关注
  • 137 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信