Python程序查找变位词
在本教程中,我们将学习如何检测给定的字符串是否为变位词。但首先我们应该熟悉变位词的概念。
什么是变位词
变位词是一种情况,其中一个字符串或数字按照这种方式重新排列;重新排列后的字符串或数字的每个字符都必须是另一个字符串或数字的一部分。换句话说,如果第二个字符串是第一个字符串的简单重新排列,则称第一个字符串是第二个字符串的变位词。 例如 – python和 yphton 是变位词; Java和 avaJ 也是变位词。
在解决这个问题之前,我们先理解一下问题描述。
问题描述
- 从用户处获取字符串输入,并将它们存储在单独的变量中。
- 使用 sort() 方法将两个字符串都排序为列表。
- 检查这两个列表是否形成变位词。
- 打印结果。
- 退出。
程序 –
def anagramCheck2(str1,str2):
# Convert string into lists
list1 = list(str1)
list2 = list(str2)
# Sort the list value
list1.sort()
list2.sort()
position = 0
matches = True
while position < len(str1) and matches:
if list1[position]==list2[position]:
position = position + 1
else:
matches = False
return matches
print(anagramCheck2('python','ythonp'))
输出:
True
解释 –
在上面的代码中,我们声明了一个anagramCheck()方法,它接受两个字符串作为参数。这些字符串被转换为列表进行排序。然后,我们定义了一个position变量并将其赋值为零。在while循环的每次迭代中,将字符串长度与位置值进行比较。两个列表的每个元素相互比较,并将位置值增加一。一旦位置值变大于字符串长度,循环将被终止,并返回true;否则,返回false。
Python中的Anagram程序示例
有几种技术和示例可以用来在Python中找到Anagram。以下是这些技术。
1. 计数器技术
在这个技术中,我们计算给定字符串中每个字符的数量。如果给定字符串的计数与另一个字符串相匹配,则对应的单词是另一个单词的Anagram。
让我们理解以下示例。
示例
from collections import Counter, defaultdict
def checking_anagram(keywords):
agrms = defaultdict(list)
for i in keywords:
hist = tuple(Counter(i).items())
agrms[hist].append(i)
return list(agrms.values())
keywords = ("python","yphotn")
print(checking_anagram(keywords))
输出:
[['python'], ['yphotn']]
解释 –
我们已经导入了 collection模块 和它的 Count 与 defaultdict 方法来检查上述代码中的字符串是否为变位词。我们定义了 checking_anagram() 方法来使用counter函数计算和记录每个字符的出现次数。每个计数都被排序在一个列表中并被跟踪。这个过程针对第一个字符串中的所有字符完成,然后是第二个字符串。如果两个字符串的计数匹配,就意味着两个字符串是变位词。
- 排序技术
在这种技术中,两个字符串都被排序,然后检查它们是否相匹配。让我们理解以下示例。
示例
def Anogram_check(str1, str2):
# Strings are sorted and check whether both are matching or not
if(sorted(str1)== sorted(str2)):
print("Both strings are an Anagram.")
else:
print("Both strings are not an Anagram.")
string1 ="python"
string2 ="ythopn"
print( "String value1 : ", str1 )
print( "String value2 : ", str2 )
Anogram_check(string1, str2)
输出:
String value1 : python
String value2 : ythopn
Both strings are an Anagram.
解释 –
在以上的代码中,我们定义了 checking_anagram() 方法,并传入了两个字符串。在 checking_anagram() 方法中,我们将字符串存储在特定变量中。我们对每个字符串进行排序后进行比较。如果字符串之间的比较匹配,则给定的字符串形成字谜;否则,它们返回为Both strings are not anagrams。这种方法相对简单和有效。它将代码复杂性降低到了一个非常重要的程度。
2. 反转字谜检查
我们可以按照以下方式应用这种技术。
示例
words_list = ["cat", "tac", "Play", "ay"]
anagrams = {}
for w in words_list:
reverse_word=w[::-1]
if reverse_word in words_list:
anagrams[w] = (words_list.pop(words_list.index(reverse_word)))
print(anagrams)
输出:
{'cat': 'tac'}
解释 –
在上面的代码中,我们使用了这种技术来比较反转字符串中的异位词。在这里,我们形成了两个不同的字符串。这种技术类似于回文,我们将其中一个字符串反转,并与其他字符串进行检查。如果它们匹配,那么这些字符串就形成了一个异位词;如果不匹配,则被认为不是异位词。
3. 位置验证技术
通过位置级别的比较来检查异位词。我们可以通过将第一个字符串的位置字符与另一个字符串中的每个位置字符进行验证来实现这一点。如果第一个字符串与另一个字符串有相似的匹配,那么它被声明为一个异位词。让我们理解以下示例。
示例
def checking_anagram(str1,str2):
chk_var = True
if len(str1) != len(str2):
chk_var = False
list1 = list(str2)
pos_string1 = 0
while pos_string1 < len(str1) and chk_var:
pos_string2 = 0
found = False
while pos_string2 < len(list1) and not found:
if str1[pos_string1] == list1[pos_string2]:
found = True
else:
pos_string2 = pos_string2 + 1
if found:
list1[pos_string2] = None
else:
chk_var = False
pos_string1 = pos_string1 + 1
return chk_var
str1 = "ythopn"
str2 = "python"
print("String value1 : " , str1)
print("String value2 : " , str2)
Boolean_out = checking_anagram('ythopn','python')
if Boolean_out:
print( "Both words are Alogram " )
else:
print( "Both words are not Alogram " )
输出:
String value1 : ythopn
String value2 : python
解释:
在这种方法中,另一种获取两个字符串的变位词的方法。我们在这里也使用了比较操作。在嵌套的 while 循环中,我们将字符串传入这些循环进行验证过程。
外部 while 循环用于处理其中一个字符串,内部循环用于另一个字符串。将一个字符串的字符与另一个字符串的每个字符进行比较,并在第一个字符串的每个字母上继续此过程。如果第一个字符串的所有字符与另一个字符串匹配,则表示两个字符串是变位词。
这种技术是一个非常稳定的过程,因为它基于算法技巧,对字符串进行准确的判断。