在本教程中,我们将学习如何检测给定的字符串是否是异序词。但首先我们应该熟悉异序词的概念。
什么是异序词?
异序词是一个字符串或数字以这种方式重新排列的情况;重新排列的字符串或数字的每个字符必须是另一个字符串或数字的一部分。换句话说,如果第二个字符串是第一个字符串的简单重排,那么这个字符串就是另一个字符串的异序词。例如-Python 和梅毒是异序词; 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
解释-
在上面的代码中,我们已经声明了anagramccheck()方法,该方法以两个字符串作为参数。这些字符串被转换成一个列表进行排序。然后,我们定义了位置变量,并将其赋值为零。在 While
循环的每次迭代中,将字符串长度与位置值进行比较。两个列表中的每个元素相互比较,并将位置值增加一。一旦位置值大于字符串长度,循环将终止,并返回真;否则,返回假。
Python 中的异序词程序示例
在 Python 中,很少有技术和例子可以用来找到异序词。下面给出了这些技术。
1.计数技术
在这种技术中,我们计算两个给定字符串中每个字符的计数。如果给定字符串的计数与另一个字符串匹配,那么对应的单词就是另一个单词的异序词。
让我们理解下面的例子。
示例-
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']]
解释-
我们导入了采集模块及其计数和默认方法来检查上述代码中字符串的异序词。我们定义了 checking_anagram() 方法,使用计数器功能对每个字符进行计数和记录。每一个计数都在一个列表中被重新排序并保持在轨道上。这个过程是为第一个字符串中的所有字符而不是第二个字符串完成的。如果两个字符串的计数匹配,这意味着两个字符串都是异序词。
- 分类技术
在这种技术中,排序两个字符串,并检查两个值是否彼此匹配。让我们理解下面的例子。
示例-
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() 方法中,我们将字符串存储在一个特定的变量中。排序后,我们比较了每个字符串。如果字符串之间的比较匹配,则给定的字符串形式为异序词;否则,它们作为字符串返回。两个字符串都不是异序词。这种方法相对简单有效。它将代码的复杂性降低到了一个非常重要的水平。
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
循环用于处理其中一个字符串,内部循环用于另一个字符串。一个字符串的字符与另一个字符串的字符进行比较,这个过程在第一个字符串的每个字母上继续。如果第一个字符串的所有字符都与另一个字符串匹配,那么这两个字符串都是异序词。
这项技术是一个非常稳定的过程,因为它基于算法技术,精确地判断字符串。