python判断是否为变位词_Python算法之判断两个字符串是否互为变位词
什么是变位词
变位词指的是一个单词可以通过改变其他单词中字母的顺序来得到,也叫做兄弟单词,如army->mary。
判断两个字符串s1和s2是否为变位词
经典的字符串变位词检测问题是比较不同数量级函数算法的一个典型例子。如果一个字符串是 另一个字符串的重新排列组合,那么这两个字符串互为变位词。比如,”heart”与”earth”互为变位 词,”python”与”typhon”也互为变位词。为了简化问题,我们设定问题中的字符串长度相同,都是由 26 个小写字母组成。我们需要编写一个接受两个字符串,返回真假,代表是否是一对变位词的布尔 函数。
解法1:对两个字符串中的字母进行逐个比对
思路:检查第一个字符串中的所有字符是不是都在第二个字符串中出现。 如果能够把每一个字符都“检查标记”一遍,那么这两个字符串就互为变位词。检查标记一个字符 要用特定值 None 来代替,作为标记。然而,由于字符串不可变,首先要把第二个字符串转化成一个列表。第一个字符串中的每一个字符都可以在列表的字符中去检查,如果找到,就用 None 代替以示标记。
时间复杂度:O(n^{2})
def is_anagram(str1, str2):
str2_list = list(str2)
pos_1 = 0
still_ok = True
while pos_1 < len(str1) and still_ok:
pos_2 = 0
found = False
while pos_2 < len(str2_list) and not found:
if str1[pos_1] == str2_list[pos_2]:
found = True
else:
pos_2 = pos_2 + 1
if found:
str2_list[pos_2] = None
else:
still_ok = False
pos_1 = pos_1 + 1
return still_ok
print(is_anagram('apple', 'pepla'))
解法2:排序比对
思路:先将两个字符串转换成两个列表,然后对这两个列表进行排序,然后对两个列表中的元素进行一一比对,如果完全一致,说明是变位词,如果不是完全一致,说明不是变位词。
时间复杂度:O(n^{2})
def is_anagram(str1, str2):
str1_list = list(str1)
str2_list = list(str2)
str1_list.sort()
str2_list.sort()
pos = 0
match = True
while pos < len(str1) and match:
if str1_list[pos] == str2_list[pos]:
pos = pos + 1
else:
match = False
return match
print(is_anagram('apple', 'pepla'))
解法3:计数比较
思路:解决变位词问题的最后一个方法利用了任何变位词都有相同数量的 a,相同数量的 b,相同数量 的 c 等等。为判断两个字符串是否为变位词,我们首先计算每一个字符在字符串中出现的次数。由于
共有 26 个可能的字符,我们可以利用有 26 个计数器的列表,每个计数器对应一个字符。每当我们 看到一个字符,就在相对应的计数器上加一。最终,如果这两个计数器列表相同,则这两个字符串 是变位词。
时间复杂度:O(n)
def is_anagram(str1, str2):
count_str1 = [0] * 26
count_str2 = [0] * 26
for i in range(len(str1)):
pos = ord(str1[i]) - ord('a')
count_str1[pos] = count_str1[pos] + 1
for i in range(len(str2)):
pos = ord(str2[i]) - ord('a')
count_str2[pos] = count_str2[pos] + 1
j = 0
still_ok = True
while j < 26 and still_ok:
if count_str1[j] == count_str2[j]:
j = j + 1
else:
still_ok = False
return still_ok
print(is_anagram('apple', 'pepla'))
python判断是否为变位词_Python算法之判断两个字符串是否互为变位词相关推荐
- 判断两个字符串是否互为变位词
看了个算法题目,觉得有趣,就换成了java版本的. 原文地址:blog.csdn.net/ns_code/article/details/21409663 题目: Write a method to ...
- 判断两个字符串是否互为变形词
判断两个字符串是否互为变形词 [题目] 给定两个字符串str1和str2,如果str1和str2中出现的字符种类一样且每种字符出现的次数也一样,那么str1和str2互为变形词.请实现函数判断两个字符 ...
- 字符串问题----判断两个字符串是否互为旋转词
判断两个字符串是否互为旋转词 如果一个字符串str,把字符串str前面的任意部分挪到后面形成的字符串叫做str的旋转词.给定两个字符串,判断是否互为旋转词.比如 a="abcd", ...
- Java判断两个字符串是否互为变形词
判断两个字符串是否互为变形词 [题目] 给定两个字符串 str I 和 str2, 如果 strl 和 str2 中出现的字符种类一样且每种字符出现的次数也 一样,那么 str l 与 str2 互为 ...
- 5.4 判断两个字符串是否互为旋转词(find函数)
[题目] 对字符串的旋转操作描述如下: 例如: str = "123456" str的所有旋转词为:"123456","234561 ...
- 浙大python判断两个字符串是否为变位词_算法2----------变位词
1.背景: 变位词指的是一个单词可以通过改变其他单词中字母的顺序来得到,也叫做兄弟单词,如army->mary. 题1:判断两个字符串s1和s2是否为变位词. 经典的字符串变位词检测问题是比较不 ...
- 判断两个单词是否互为变位词
题目:在英语中,如果两个单词中出现的字母相同,并且每个字符出现的次数也相同,那么这两个单词互为变位词(Anagram).例如slient与listen.evil与live等互为变位词.请完成一个函数, ...
- 判断两个字符串是否是变形词
问题: 给定两个字符串str1和str2,如果str1和str2中出现的字符种类一样并且每种字符出现的次数也一样,那么str1与str2互为变形词.请实现函数判断两个字符串是否互为变形词. 举例: s ...
- 浙大python判断两个字符串是否为变位词_python数据结构与算法 变位词
变位词 问题简述 "变位词"判断问题:所谓 "变位词" 是指两个词之间存在组成字母的重新排列关系,例如 Heart 和 Earth,python 和 typho ...
- 7-20 判断两个字符串是否为变位词 (10 分)如果一个字符串是 另一个字符串的重新排列组合,那么这两个字符串互为变位词。比如,”heart”与”earth”互为变位 词,”Mary”与”arMy
7-20 判断两个字符串是否为变位词 (10 分) 如果一个字符串是 另一个字符串的重新排列组合,那么这两个字符串互为变位词.比如,"heart"与"earth" ...
最新文章
- python使用需要钱吗-万能的Python竟然算不明白“钱”?损失惨重!
- java读取XML文件的四种方式
- Android版‘音乐一点通’音乐播放器详情
- 老李分享:Android -自动化埋点 2
- Android支付宝SDK开发笔记
- JAVA多线程之Synchronize 关键字原理
- java 一致性hash算法 均衡分发_Dubbo一致性哈希负载均衡的源码和Bug,了解一下?...
- matlab 工具函数、matlab toolbox(工具箱)
- Java中如何跳出多重for循环
- Linux 系统性能分析工具图解读
- css定位、position与float同时使用的情况
- 最小堆实现优先队列:Python实现
- C++循环---数字统计(自学用)
- 计算机自动化程序高 应用范围广是由于,计算机等级考试一级笔试模拟试题(三)及答案...
- Go语言中的条件变量Cond
- PyCharm关闭拼写检查(Typo提示)
- 最简便的方法搭建Hexo+Github博客,基于Next主题
- word 计算机内存不足,Win10系统中,为什么打开WORD提示内存不足?
- JAVA生成二维码链接(扫描二维码后进行指定链接跳转)
- NavCat15安装教程