Java Program to Check if Two Strings are Cyclic Permutations of Each Other

2025 年 3 月 28 日 | 阅读 4 分钟

这是通常会在Google、Microsoft、TCS、Accenture等著名 IT 公司面试中遇到的问题。通过弄清楚解决方案,可以评估面试者的逻辑推理、批判性思维和解决问题的能力。在本节中,我们将创建一个 Java 程序,使用不同的方法检查两个相同长度的字符串是否是彼此的循环排列。

循环排列

当一个字符串可以通过旋转其字符变成另一个字符串时,就会发生循环排列。

示例

  • String str1 = "ABCD";
  • String str2 = "CDAB";

输出

  • 是(因为旋转“CDAB”得到“ABCD”)

有多种方法可以检查两个字符串是否是彼此的循环排列。在本节中,我们将讨论以下方法

  1. 排序和比较方法
  2. 计数和比较方法
  3. 单数组计数方法

使用排序和比较方法

排序和比较是一种方法,其中两个字符串首先被转换为字符数组,然后进行排序和比较。如果排序后的数组匹配,则认为字符串是彼此的排列。

让我们在 Java 程序中实现上述方法。

文件名:PermutationChecker.java

输出

 
No   

时间复杂度: O(n log n)

辅助空间: O(n)

使用计数和比较方法

计数和比较是一种方法,其中使用数组计算两个字符串中的字符频率。然后比较这些频率数组以确定字符串是否是彼此的排列。

让我们在 Java 程序中实现上述方法。

文件名:PermutationChecker.java

输出

 
Yes   

时间复杂度: O(n),其中 n 是字符串的长度。

辅助空间: O(1)

使用单数组计数方法

该方法使用单个数组来跟踪两个字符串中字符的频率。通过检查处理后它们的字符计数是否匹配来确保字符串是排列。

文件名:PermutationChecker.java

输出

 
Yes