【发布时间】:2019-11-13 19:15:57
【问题描述】:
我正在学习时间复杂性,理论上我已经读过要检查 Anagram 是否有两个相同长度的字符串,可以有两个版本:
- 对字符串进行排序并比较 O(nlogn)
- 计算字符 O(n)
但我想继续使用代码体验同样的体验。
所以我编写了两个版本的代码并使用 python timeit 模块检查时间,但我得到了不同的结果。
import timeit
def method_one(input1, input2):
"""
Check if two string are anagram
"""
if len(input1) == len(input2):
if sorted(input1) == sorted(input2):
return True
return False
def method_two(input1, input2):
"""
Check if two string are anagram using count the character method
"""
count_char = [0] * 26
if len(input1) == len(input2):
for i in range(0, len(input1)):
count_char[ord(input1[i])-ord("a")] += 1
count_char[ord(input2[i])-ord("a")] -= 1
for i in count_char:
if(bool(i)):
return False
return True
return False
timer1 = timeit.Timer("method_one('apple','pleap')", "from __main__ import method_one")
timer2 = timeit.Timer("method_two('apple','pleap')", "from __main__ import method_two")
print(timer1.timeit(number=10000))
print(timer2.timeit(number=10000))
method_one: 0.0203204
method_two: 0.1090699
理想情况下,计数字符应该会赢,但结果与我的预期相反。
【问题讨论】:
标签: python time-complexity anagram timeit