检查两个字符串是否为 Anagram 的 Java 程序字谜程序

已发表: 2021-07-23

目录

关于 Java 的鲜为人知的事实

作为最耐用的编程语言之一,Java 因其强大而灵活的特性而在全球范围内使用。 Java 的稳定性和多功能性使其成为最受欢迎的编程语言之一。 然而,关于这种安全编程语言还有几​​个鲜为人知的事实。 让我们了解其中的几个。

  • Oak 是 Java 的原始名称。
  • 在学习这种编程语言的同时,你可以赚很多钱。
  • Java 是世界上人口第二多的编程语言,第一是 C。
  • 全世界约有 30 亿台设备正在使用 Java。
  • Java 是一种区分大小写的编程语言。 即,Java 代码中的“Final”和“final”是不一样的。 阅读更多关于为什么 java 如此受开发人员欢迎的信息。

字谜概述

如果通过重新排列其字符将一个字符串转换为另一个字符串,则称这两个字符串是彼此的字谜。 但是,初始字符串中的字符数和得到的字符串应该是相同的。 为了更好地理解字谜的概念,让我们考虑两个字符串,“上帝”和“狗”。

字符串 'god' 和 'dog' 是彼此的字谜,因为只需交换字符 'd' 和 'g' 的位置,就可以重新排列前一个字符串以获得后一个字符串。 对于任意两个输入字符串,计算每个字符出现的频率以检查字符串是否是彼此的字谜。 因此,字符串的变位词可以定义为任何其他字符串,其具有与输入字符串中任何序列中相同字符且频率相同的字符。

Java Anagram 程序的算法

第 1 步:定义两个输入字符串。

第二步:确定每个字符串的长度。 如果输入字符串具有不同的字符串长度,则它们不是彼此的字谜。

步骤 3:如果字符串长度相同,则将字符串字符转换为小写字母,以确保比较容易。

步骤 4:字符串字符要么通过内置函数排序,要么转换为字符数组然后排序。

第 5 步:检查排序后的字符数组是否相等。

Java中Anagram程序的实现

有几种解决方案可以实现代码来判断两个字符串是否是字谜。 对于后续部分中讨论的每个解决方案,上述算法的第 2 步构成了基础,并有助于在字符串长度不匹配时提前退出。 在接下来的部分中,让我们更多地了解为字谜逻辑编写代码的不同类型。

排序方法

可以对每个输入字符串的字符进行排序,得到两个归一化的字符数组。 如果两个输入字符串的归一化数组相同,则这些字符串被认为是彼此的字谜,反之亦然。

这段代码的理解和实现更容易。 上述解决方案的时间复杂度为 O(n log n),并且需要额外的空间来存储输入字符串的字符数组。

从世界顶级大学在线学习软件开发课程获得行政 PG 课程、高级证书课程或硕士课程,以加快您的职业生涯。

实现字谜逻辑的计数方法

在这种方法中,测量两个输入字符串中每个字符的存在次数。 如果两个字符串中每个字符的频率相同,则这些字符串是彼此的字谜。

让我们建立一个直方图来节省一些内存。 在第一个字符串中,每个字符的计数递增,而第二个字符的计数递减。 如果最终结果将一切都平衡为零,那么字符串就是字谜。

该解决方案比之前的解决方案执行得更快,其时间复杂度为 O(n)。 但是,需要额外的空间来计算字符数。 此解决方案实际上仅对具有较小字符范围的字符串有效。 这个解决方案的另一个事实是它使用了有限数量的内置 Java 函数,因此增加了代码的长度。

结帐: Java 项目的想法和主题

通过检查 MultiSet 来确定 Anagrams

使用 MultiSet(一个帮助与相同元素进行与顺序无关的比较的集合)简化了此解决方案中的计数和比较过程。

每个输入字符串最初都被转换为一个 MultiSet 字符,然后检查奇偶校验。

该解决方案的时间复杂度为 O(n)。 它类似于确定字谜的计数方法。 但是,它可以有效地处理更大长度的字符串。 此外,编码涉及更多的 Java 库函数。

基于字母的方法来确定字谜

到目前为止讨论的所有解决方案都将标点符号视为字符串的一部分。 此外,这些解决方案区分大小写。 基于字母的方法实现了一个代码,以根据字谜的语言定义检查输入字符串。 在这种方法中,空格和标点符号不被视为输入字符串的一部分。

实施基于字母的解决方案的第一步是消除不需要的字符并将所有有效字符转换为小写字母。 在这一步之后,可以使用上面讨论的任何实现来检查字符串是否是字谜。

如果您有兴趣了解有关 Java、全栈软件开发的更多信息,请查看 upGrad 和 IIIT-B 的软件开发执行 PG 计划——全栈开发专业化,专为工作专业人士设计,提供 500 多个小时的严格培训, 9+ 项目和任务,IIIT-B 校友身份,实用的实践顶点项目和顶级公司的工作协助。

踏上梦想的工作

从 IIIT-B 申请软件开发执行 PG 计划