【发布时间】:2020-04-18 11:01:01
【问题描述】:
我正在考虑比较两个字符串的更快方法。 检查 Python 集合(哈希表)中是否存在值具有恒定的时间。 是不是意味着在set中查找字符串也有恒定的时间?
print('tya' == 'tya') #O(n)
mySet = set()
mySet.add('tya')
if 'tya' in mySet: #O(1) <-- ???
print('True')
在更一般的情况下,这是否意味着我可以在线性时间内找到字符串中的子字符串???
def NaiveFind(largeString, subString):
mySet = set()
mySet.add(subString)
index = -1
start = 0
end = len(subString)
while(end < len(largeString)): #O(n-m)
windowFromLarge = largeString[start:end]
if(windowFromLarge in mySet): #O(1) <------- LINEAR ???
#if(windowFromLarge == subString): #O(m)
return start
start += 1
end += 1
return index
【问题讨论】:
-
这不会比仅比较两个字符串更快,因为您必须创建集合等
-
相对于集合的大小大约是 O(1)。字符串的散列时间似乎是 O(len(string)),请参阅 stackoverflow.com/questions/2070276/…
-
当然,但我正在创建与实际子字符串匹配算法并行的集合
标签: python python-3.x string-comparison