python 如何做这个词典编纂Lc问题的正确方法

ubby3x7f  于 2022-12-17  发布在  Python
关注(0)|答案(1)|浏览(87)

我正在尝试解决一个leetcode练习题,这个问题是将2个字符串中词典编纂顺序较小的每个字符合并成一个字符串,下面是一个例子。x1c 0d1x
这是我尝试过的:

def solution(s1, s2):
    s1=list(s1);s2=list(s2)
    res=[]
    while(1):
        if len(s1)==0:
            res+=s2
            return ''.join(res)
        elif len(s2)==0:
            res+=s1
            return ''.join(res)
        else:
            if s1[0]< s2[0]:
                res.append(s1[0])
                s1.remove(s1[0])
            else:
                res.append(s2[0])
                s2.remove(s2[0])

测试运行的结果相当奇怪,因为我在一些情况下是正确的,但在其他情况下是错误的(正确的(s1:“超级”,s2:“塔”==〉“stouperwer”)如预期),但像(s1:“enbvszyppzyiydnc”s2:“ousswsbeljamma”)结果是不同的(正确答案:“eounbvszswsbeljammayppzyiydnc”,我的输出:“enboussvswsbeljammazyppzyiydnc”)。也许,我错过了理解词典的东西在哪里。你们能让我知道吗?谢谢!

tv6aics1

tv6aics11#

可以使用ord比较两个字符串。

def solution(s1, s2):
    s1, s2 = list(reversed(s1)), list(reversed(s2))
    result = []
    while min(len(s1), len(s2)):
        if ord(s1[-1]) <= ord(s2[-1]): result.append(s1.pop())
        else: result.append(s2.pop())
    return "".join(result + list(reversed(s1 + s2)))

使用reversed意味着不需要重复删除第一个数字(如果一直这样做,将花费O(n^2)),而是只能执行一次该过程。
另外,您使用<来比较字符串,但是如图所示,优先级来自第一个列表,因此应该是<=

相关问题