来自北大算法课的Leetcode题解:748. 最短补全词

代码仓库Github | Leetcode solutions @doubleZ0108 from Peking University.

  • 解法1(T54% S12%):纯字符串处理题,不过还是有点小麻烦的。首先把原字符串进行过滤,滤掉空格和数字并转为字符数组进行排序(方便python处理),然后循环words,对于每个word先排序,然后用双指针来判断word是否包含了license里所有的字符,最后保存最小的结果就好。双指针判断可以参考 392题. 判断子序列
class Solution:
    def shortestCompletingWord(self, licensePlate: str, words: List[str]) -> str:
        licensePlate = sorted(list(filter(lambda x: not (ord(x)>=ord('0') and ord(x)<=ord('9')) and x!=' ', [_ for _ in licensePlate.lower()])))
        residx = -1
        for idx, word in enumerate(words):
            strs = sorted([_ for _ in word])
            i, j = 0, 0
            while i<len(licensePlate) and j<len(strs):
                if licensePlate[i] == strs[j]:
                    i += 1
                    j += 1
                else:
                    while j<len(strs) and licensePlate[i] != strs[j]:
                        j += 1
            if i==len(licensePlate):
                if residx==-1 or len(word)<len(words[residx]):
                    residx = idx
        return words[residx]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

doubleZ0108

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值