【007】Leetcode—雙重指針—524. 通過刪除字母匹配到字典裏最長單詞(Longest Word in Dictionary through Deleting)

題目信息

給定一個字符串和一個字符串字典,找到字典裏面最長的字符串,該字符串可以通過刪除給定字符串的某些字符來得到。如果答案不止一個,返回長度最長且字典順序最小的字符串。如果答案不存在,則返回空字符串。

說明:

所有輸入的字符串只包含小寫字母。
字典的大小不會超過 1000。
所有輸入的字符串長度不會超過 1000。

示例:

1:

輸入:
s = “abpcplea”, d = [“ale”,“apple”,“monkey”,“plea”]
輸出:
“apple”

2:

輸入:
s = “abpcplea”, d = [“a”,“b”,“c”]
輸出:
“a”

解題思路

		result = []
        sLength = len(s)
        for item in d:
            #i是長串s的指針 j是短串item的指針
            i = 0
            j = 0
            iLength = len(item)
            while i < sLength and j < iLength:
                #如果相同,則兩個指針向右移
                if s[i] == item[j]:
                    i += 1
                    j += 1
                else:
                #如果不同,則長串指針後移
                    i += 1
            else:
                if j == iLength:
                    result.append(item)
        if result:
        	p = sorted(result, key=lambda x: len(x))
            q = [x for x in p if len(x) == len(p[-1])]
            return sorted(q)[0]
        else:
            return ''

result存放的是從d中篩選出的滿足題目條件的子串

p是將result按長度從小到大排序

q是取p中長度最長的那批子串,且sorted(q)是按字典順序排列,sorted(q)[0]即爲所求

學習

TODO

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章