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

比较java中的两个字符串并识别重复的单词

相俊迈
2023-03-14

我试图比较两个字符串并识别重复的单词。例如

String1 = "Hello, my name is John."
String2 = "Can you tell me your name please?"

比较String1和String2将返回单词;“名字”。

我知道有可能将这两个字符串拆分成一个单词数组,然后在二维数组中迭代每个字符串的每个单词。然而,在O(n^2)时,这在计算上是昂贵的,我想知道是否有更快的方法?

谢谢。

编辑:为了清晰起见更改了示例。

共有2个答案

司空福
2023-03-14

一个简单的解决方案是使用集合。交叉点番石榴的方法集。这很简单:

String s1 = "Hello, my name is John.";
String s2 = "Can you tell me your name?";
Splitter splitter = Splitter.onPattern("\\W").trimResults().omitEmptyStrings();
Set<String> intersection = Sets.intersection(//
        Sets.newHashSet(splitter.split(s1)), //
        Sets.newHashSet(splitter.split(s2)));
System.out.println(intersection);

输出:

[name]

您还可以在此线程上找到有关检测集合相交的算法的更多信息。

霍书
2023-03-14

在获得字数组的字符串后:

可以将第一个数组中的所有元素添加到hashmap中,然后扫描第二个数组,查看hashmap中是否存在每个元素。由于对hashmap的访问时间是O(1),这将是O(n m)时间复杂度。

如果不想使用额外的空间,可以对两个数组进行O(nlogn)排序,然后比较O(NM)中的项目,这样就得到了O(nlogn)总数。

 类似资料:
  • 在与字符串进行比较时,我们可以使用或 在中,我们知道它检查引用,但在中它检查内容。 假设有两个字符串 字符串s=“SO”;字符串s1=“SO”; 所以在这种情况下,s1==s和s.equals(s1)都将为真。 但在这里它给了我错误 所以我假设比优先级高 所以在这种情况下 它将像(“s1)==s一样被拆分,现在“s1”将是一个新字符串,因此新字符串永远不会等于s,因此其打印错误 我只是想知道我的想

  • 如何检查一个字符串是否在另一个字符串中,但匹配项需要在前面,而不是中间或最后。例如,a="

  • 问题内容: 有什么方法可以像下面这样在SQL Server 2008存储过程中比较两个字符串? 如果字符串相同,则返回0 如果根据当前的排序顺序,第一个参数小于第二个参数,则返回-1。 否则返回1。 以上方法我在MySQL中找到,但在SQL Server中找不到。 问题答案: SQL Server中没有直接的字符串比较功能 笔记 您可以使用CREATE FUNCTION等通过UDF进行包装 您可能

  • 我一直在为我的服务器做一个非常简单的bukkit插件,只是为了个人使用。我做了一个叫播放器的命令,当某人有权限(broadcaster.players)时,它会显示服务器播放器的列表。我还想让它在游戏中显示玩家的游戏模式。但是我不知道如何把它们放在一起。 我的代码: 如果它说,我想在同一行上显示游戏模式。 当然,这从来没有工作过,我不知道该怎么办,有人能给我建议我能做什么吗,我的代码很混乱,但我是

  • 问题内容: 我正在使用Java中的Chord协议实现简单的DHT。详细信息并不重要,但是我要坚持的事情是我需要对字符串进行哈希处理,然后查看一个哈希字符串是否“小于”另一个。 我有一些代码可以使用SHA1计算哈希,该哈希返回40位长的十六进制字符串(在Java中为String类型),例如: 但是我需要能够比较其中的两个,以便例如: 小于: 这是值的完整范围,因为40位数的字符串实际上代表01234

  • 我无法使用以下代码比较两个字符串: 我有一个名为“gender”的字符串,它将以“male”或“fomen”作为其值。 这不起作用,所以我尝试了以下几种: 又一次,没有奏效。请告诉我如何使用if语句比较字符串值。