当前位置: 首页 > 知识库问答 >
问题:

在java中求两个多重集的交集

贺靖
2023-03-14
         for(i=0;i<m1.length();i++)
             for(j=0;j<m2.length();j++)
                 if(m1.charAt(i)==m2.charAt(j)){
                     intersection=intersection+m1.charAt(i); 
                     m2.charAt(j)=' ';



                 }

                    System.out.println(intersection);



         } while(devam==false);

    }

}

这是我的密码。我们不允许使用方法或数组,我们只是初学者。我的代码在m2处给出了一个错误。charAt(j)='' 。我写这条线是因为,当我们找到一个交点时,我们不应该再检查那个元素。你能帮忙吗?


共有2个答案

吕嘉荣
2023-03-14

正如Brian所说,java中的字符串是不可变的。这意味着您不能通过像m2.charAt(j)=' '这样的方法调用进行赋值。这意味着您必须使用另一种方式来跟踪您是否找到了该字符。

您可以将其添加到中,当检查字符时,请使用intersection.indexOf(char c)来确保它不在中,如果返回-1,则它不在字符串中。

编辑:

抱歉没有考虑到输出应该是多集。上面解决了输出是集的问题。

您可以在m2上使用replace eFirst(String search chFor,字符串替换)来删除它。

    for( int i =0; i < m1.length(); i+=2)
    {
       if(m2.indexOf(m1.charAt(i)) != -1)
       {
          intersection = intersection + m1.charAt(1) + " ";
          m2 = m2.replaceFirst(new String(m1.charAt(i)), "");
       }
    }

所以如果m1='1235'和m2='1421',

第一关:在“14 2 1”中寻找1

第二遍:在'4 2 1'中寻找1

第三遍:在'4 2'中寻找2

第四遍:在'4'中寻找3

第五关:在'4'中寻找5个

返回“11 2”

请注意,它是将变量增加2以考虑空格。只有当我们假设两个字符串是“a a a a a a a a”的形式,“a”只有一个字符时,才会这样做。如果有位数或字符超过一位数,那么你必须跳过空白,用不同的方式解释字符串,而不仅仅是逐个字符地看。

如果我们能做出这些假设,明智的做法是使用Stringtrim方法iem1=m1来修剪m1的尾随和前导空格。执行此循环前修剪()。

董高朗
2023-03-14

不能使用修改字符串的内容

m2.charAt(j)=' ';

这样做吧

m2 = m2.replace(m2.charAt(j), ' ');

请注意,replace()将替换字符串中与第一个参数相等的第一个字符。我假设,因为字符串代表一个集合,所以不会是重复的字符。如果有,并且您想替换所有,只需使用replaceAll()。

 类似资料:
  • 问题内容: 我有两个排序集,并且想要进行交集,即。 关于效率,是否有比以下更好的方法: 问题答案: 您应该先使用ZCARD检查哪些元素较少,然后克隆并修剪较短的元素。 其次,您将剩下2个剩菜。您可以重复使用同一辅助程序,以加快清除速度。 我还想建议克隆使用DUMP和RESTORE,但是对于排序集的情况,ZUNIONSTORE实际上要快得多。这是一个100万个元素集的时间安排:

  • 问题内容: 我试图根据某些条件并执行一些步骤来找到两个列表。在学习阶段找不到方法:) 如您所见,逻辑很简单 根据某个过滤器从订单中获取所有项目,并与另一个过滤器相交并做一些事情。 问题答案: 最简单的方法是这样的:

  • 我已经读过一些其他的堆栈溢出线程: 在java中求两个多集的交集 我如何获得两个数组之间的交集作为一个新数组? 我试图检查两个数组以及它们的元素数(numElementsInX和numElementsInY),并返回一个包含数组x和y的公共值的新数组。他们的交集。 编辑代码

  • 问题内容: 我有两个平面列表,其中一个包含重复值。例如, 我需要在array1中也找到array2中的值,并保留array1中的重复项。预期的结果将是 我想避免循环,因为实际数组将包含数百万个值。我尝试了各种布景和相交组合,但无法保留重复项。 任何帮助将不胜感激! 问题答案: 您是什么意思不想使用循环?您将不得不以一种或另一种方式对其进行迭代。只需单独放入每个项目,然后检查是否随身携带: 此外,根

  • 问题内容: a = [1,1,1,2,3,4,4] >>> b = [1,1,2,3,3,3,4] 请注意,这不是一个相同的问题: 两个列表的Python交集保持重复 因为即使列表a中有三个1,列表b中也只有两个,所以结果应该只有两个。 问题答案: 您可以使用此方法,当您使用交叉路口时,它将为每个元素提供在任一列表中找到的最低计数。 输出 :

  • 我有以下功能用于统一多个集合(包括重复元素): 如果集合的交集具有类似签名的函数(使用类型相等),那就太好了。例如: 我找到了一个相交函数的实现,但它不使用流: 是否有任何方法可以利用流实现类似于unify函数的功能?我在java8/StreamAPI方面没有太多经验,因为一些建议会非常有用。