Python 程序检查两个字符串是否是彼此的字谜2024年8月29日 | 阅读 8 分钟 变位词(Anagram)是指通过重排另一个单词或短语的字母而形成的单词或短语。 例如,“listen”是“silent”的变位词,“fired”是“fried”的变位词,反之亦然。 给定两个字符串,问题是找出它们是否互为变位词。 示例 1示例 2方法 1 - 使用排序来检查给定的字符串是否是变位词程序可以总结如下:
输出 The two strings are anagrams. 说明 isAnangram 函数首先检查字符串长度是否相同。如果长度不同,则返回 false,表明字符串不可能互为变位词。如果长度相同,函数将对每个字符串中的字符进行排序和比较。如果排序后的字符串相同,则返回 True,表示原始字符串是变位词。如果排序后的字符串不相同,则原始字符串不是变位词,函数返回 False。 时间复杂度 - O(n*logn): 排序操作的时间复杂度为 O(n*logn)。 空间复杂度 - O(n): 需要额外的空间来存储排序后的字符串。 方法 2 - 使用数组存储每个字符的计数。程序可以总结如下:
输出 The two strings are anagrams. 说明 isAnangram 函数首先检查字符串长度是否相同。如果长度不同,则返回 false,表明字符串不可能互为变位词。 然后,函数初始化一个大小为 26(用于 26 个英文字母)的频率数组 freq,以计算第一个字符串 str1 中每个字符的频率。使用字符的 ASCII 值,将每个字符的频率存储在 freq 数组的相应索引中。 然后,函数遍历第二个字符串 str2 中的字符,并在 freq 数组中递减每个字符的频率。如果 str2 中某个字符的频率大于 str1 中的频率,则字符串不可能是变位词,函数返回 False。 如果 str1 和 str2 中字符的频率相同,函数返回 True。 时间复杂度 - O(n): 程序遍历两个字符串的每个字符,因此其时间复杂度等于 O(n)。 空间复杂度 - O(1): 不需要额外的空间。对于所有 26 个字母,数组的大小是固定的。 方法 3 - 使用字典计算字符频率。程序可以总结如下:
输出 The two strings are anagrams. 说明 isAnagram() 函数首先创建一个空字典来存储字符串 1 中每个字符的频率。然后,它使用 for 循环遍历字符串 one 中的每个字符,如果字符不存在,则将其作为键,然后每次将该字符的频率加一。 然后,它使用 for 循环遍历字符串 two 中的每个字符,并检查字典中是否存在该键,或者该字符的频率是否为零。如果满足任何一个条件,则返回 false。 它逐个递减每个字符的频率,并在程序结束时返回 True,表示两个字符串都是变位词。 时间复杂度 - O(n): 程序使用 for 循环遍历两个字符串 空间复杂度 - O(n): 它使用字典来存储频率。字典的大小取决于字符串的长度。 方法 4 - 使用 collections 中的 Counter()程序可以总结如下:
输出 The two strings are anagrams. 说明 Counter 类返回一个字典对象,其中每个字符作为键,频率计数作为值。isAnagram() 函数照常检查给定的字符串长度是否相同。如果字符串长度不同,则返回 False。否则,它创建两个 Counter 对象,一个用于字符串 one,另一个用于字符串 two。它比较两个计数器并返回结果。 时间复杂度 - O(n): 创建一个计数器取决于输入的大小,因此程序的 time complexity 等于 O(n)。 空间复杂度 - O(n): 程序创建了两个计数器,其大小取决于输入字符串的长度。 方法 4 - 使用 XOR 运算符程序可以总结如下:
输出 The two strings are anagrams. 说明 当两个位不同时,XOR 运算符给出 1;当两个位相同时,XOR 运算符给出 0。 XOR 运算符的真值表
例如,如果我们对 10101 和 11011 进行 XOR,我们将得到 10101 在 Python 中,XOR 运算符用插入符号 (^) 表示。 让我们举一个例子来理解程序的思路。 5^3 = 6 在这里,我们首先对 5 和 3 进行按位 XOR。然后是 3 和 6(上一个操作的结果)。最后,是 5 和 5(上一个操作的结果)。 上述程序也遵循同样的思路。在上述程序中,我们首先使用 + 运算符 str1 + str2 连接两个字符串。使用 for 循环,我们遍历每个字符串并与 result 执行按位 XOR。思路是,如果两个字符串是变位词,结果将为 0。否则,为某个整数。 在程序结束时,我们根据 isAnagram 函数返回的值打印结果。 时间复杂度 - O(n): 其中 n 表示 str1+str2 的大小。使用 for 循环遍历连接后的字符串。 空间复杂度 - O(1): 不需要额外的空间。 下一个主题Python 中输入列表 |
Python 中的 'and' 与 '&' 在以下教程中,我们将了解 Python 编程语言中 'and' 与 '&' 之间的区别。理解 Python 中 'and' 与 '&' 之间的区别 这些是我们用于 Python 的一些运算符;但是,有一个根本的区别...
阅读 3 分钟
Python 提供了内置方法来向列表中追加或添加元素。我们还可以将一个列表追加到另一个列表中。这些方法如下所示。 append(elmt) - 它在列表末尾追加值。 insert(index, elmt) - 它在指定位置插入值...
阅读 2 分钟
在本教程中,我们将讨论运算符重载、其优点以及如何重载“+”运算符。在讨论 __add__ 方法之前,让我们了解什么是运算符重载。运算符重载使我们能够为现有运算符创建定义,以便我们可以使用...
阅读 3 分钟
在本文中,我们将讨论将函数作为参数传递给 Python。函数可以接受多个参数。这些参数可以是对象、变量(相同或不同数据类型)和函数。Python 函数是第一批优雅的小工具。在以下实例中,一个特性...
阅读 4 分钟
在本教程中,我们将演示不同的基于 Python 的方法,用于将多个 CSV 数据合并或组合到一个文件中(此方法也适用于文本文件和其他类型的文件)。还将有一个额外课程,介绍如何快速合并多个 CSV 文件,以……
阅读 3 分钟
水壶问题是一个经典的谜题,涉及使用两个水壶来测量一定量的水。水壶问题的主要目标是使用水壶通过注水和倒水来测量出特定量的水...
阅读9分钟
Python中的getter和setter与其他面向对象语言中的不同。getter和setter的主要用途是确保面向对象程序中的数据封装。与其他面向对象语言不同,Python中的私有变量不是隐藏字段。一些面向对象语言使用...
阅读 6 分钟
| Python 为什么不支持指针。在本教程中,我们将了解 Python 中的指针,并看看 Python 为什么不支持指针概念。我们还将了解如何在 Python 中模拟指针。下面是对指针的介绍,适合那些不熟悉......
阅读9分钟
这并非真正随机,而是用于生成伪随机值。这意味着这些随机值是可以预测的。在某些情况下,random() 方法会生成数字。此数量也称为种子值。语法 random.seed(i, version ) 参数:i:任何值,它是...
5 分钟阅读
在本教程中,我们将了解 Python 中的惰性求值,并讨论 Python 为我们优化了多少代码。我们还将学习如何编写惰性函数/类。惰性求值是一种将表达式的求值推迟到其值实际需要的时候的技术……
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India