如何最大化优化Python电话号码前缀匹配检测代码?
优化电话号码前缀检测代码以提升运行速度
我正在编写一段代码,用来接收电话号码列表,检测列表中是否存在一个或多个号码是其他号码的前缀。目标是最大化优化代码,实现最快的运行速度。
原代码实现
cases = [] t = int(input()) for i in range(0, t): n = int(input()) case = [] for j in range(0, n): case.append(str(input())) cases.append(sorted(case)) print(cases) for c in cases: answer = 'YES' for k in range(0, len(c)): if answer == 'YES': for l in range(0, len(c)): if c[k] != c[l]: if c[k] == c[l][0:len(c[k])]: answer = 'NO' break else: break print(answer)
优化方案与效果
采用@Gelineau提出的方案后,代码运行时间从原本的超过3秒大幅缩短至0.82秒。核心优化思路是:
- 先对电话号码列表进行排序,字符串排序会让短前缀号码自然排在被前缀号码的前面,这样如果存在前缀关系,只需要检查相邻元素即可
- 放弃原有的嵌套遍历所有元素的逻辑,改为遍历排序后的列表,仅检查每个号码是否是下一个号码的前缀,将时间复杂度从O(n²)优化为O(n log n)(主要开销来自排序操作)
优化后的代码
cases = [] t = int(input()) for i in range(0, t): n = int(input()) case = [] for j in range(0, n): case.append(str(input())) cases.append(case) for case in cases: answer = 'YES' case.sort() for case_k, case_next in zip(case, case[1:]): if case_k == case_next[:len(case_k)]: answer = 'NO' break print(answer)
内容的提问来源于stack exchange,提问作者AndersM
相关产品推荐
相关产品推荐

