You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何最大化优化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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:18:22