Python 程序查找字谜

17 Mar 2025 | 5 分钟阅读

在本教程中,我们将学习如何检测给定的字符串是否是字谜。但在此之前,我们应该熟悉字谜的概念。

什么是字谜?

字谜(Anagram)是一种条件,其中一个字符串或数字以某种方式重排;重排后的字符串或数字的每个字符都必须是另一个字符串或数字的一部分。换句话说,如果第二个字符串是第一个字符串的简单重排,则称该字符串是另一个字符串的字谜。例如 - pythonyphton 是字谜; JavaavaJ 也是字谜。

在着手解决问题之前,我们将先理解问题描述。

问题描述

  • 从用户那里获取字符串输入,并将其存储在单独的变量中。
  • 使用 **sort()** 方法将两个字符串排序为列表。
  • 检查两个列表是否构成字谜。
  • 打印结果。
  • 退出

程序 -

输出

True

解释 -

在上面的代码中,我们声明了 **anagramCheck()** 方法,该方法接受两个字符串作为参数。这些字符串被转换为列表以进行排序。然后,我们定义了 **position** 变量并为其赋值为零。在 while 循环的每次迭代中,字符串长度与 position 值进行比较。两个列表的每个元素互相比较,并将 position 值加一。一旦 position 值大于字符串长度,循环将终止并返回 **true**;否则,它将返回 false。

Python 字谜程序示例

我们可以使用几种技术和示例来在 Python 中查找字谜。这些技术如下所示。

1. Counter 技术

在这种技术中,我们计算两个给定字符串中每个字符的计数。如果一个给定字符串的计数与另一个字符串匹配,则相应的单词是另一个单词的字谜。

让我们理解下面的例子。

示例 -

输出

[['python'], ['yphotn']]

解释 -

我们导入了 **collection 模块** 及其 **Counter** 和 **defaultdict** 方法来检查字符串的字谜。我们定义了 **checking_anagram()** 方法,使用 Counter 函数来计算和记录每个字符。每个计数都会被重新排序到一个列表中并进行跟踪。此过程对第一个字符串的所有字符完成后,再对第二个字符串进行。如果两个字符串的计数匹配,则意味着这两个字符串是字谜。

  • Sort 技术

在这种技术中,对两个字符串进行排序,并检查它们的值是否匹配。让我们通过以下示例来理解。

示例 -

输出

String value1 :  python
String value2 :  ythopn
Both strings are an Anagram.

解释 -

在上面的代码中,我们定义了 **checking_anagram()** 方法并传入了两个字符串。在 **checking_anagram()** 方法中,我们将字符串存储在特定的变量中。我们比较了排序后的每个字符串。如果字符串之间的比较匹配,则给定的字符串构成字谜;否则,它们被返回为“两个字符串不是字谜”。此方法相对简单有效。它大大降低了代码的复杂性。

2. Reverse Anagram 检查

我们可以按如下方式应用此技术。

示例 -

输出

{'cat': 'tac'}

解释 -

在上面的代码中,我们使用了这种技术来比较反向字符串之间的字谜。在这里,我们形成了两个不同的字符串。此技术类似于回文,我们将其中一个字符串反转并与另一个字符串进行比较。如果它们匹配,则字符串构成了字谜;如果不匹配,则它们不被视为字谜。

3. Position Verification 技术

在此方法中,通过位置级别进行比较来检查字谜。我们可以通过将第一个字符串的位置字符与另一个字符串中的每个位置字符进行比较来实现此目的。如果第一个字符串在另一个字符串中找到了相似的匹配项,则将其声明为字谜。让我们通过以下示例来理解。

示例 -

输出

String value1 :  ythopn
String value2 :  python

说明

在这里,这是另一种获取两个字符串的字谜的方法。我们在这里也使用了比较。在嵌套的 while 循环中,我们将字符串传递给这些循环进行验证过程。

外部 while 循环用于处理其中一个字符串,内部循环用于处理另一个字符串。一个字符串的字符与另一个字符串的每个字符进行比较,并且此过程会应用于第一个字符串中的每个字母。如果第一个字符串的所有字符都与另一个字符串匹配,则这两个字符串被认为是字谜。

这项技术是一个非常稳定的过程,因为它基于算法技术,能够精确地判断字符串。