524. Longest Word in Dictionary through Deleting
Medium
Given a string and a string dictionary, find the longest string in the dictionary that can be formed by deleting some characters of the given string. If there are more than one possible results, return the longest word with the smallest lexicographical order. If there is no possible result, return the empty string.
Example 1:
Input:
s = "abpcplea", d = ["ale","apple","monkey","plea"]
Output:
"apple"
Example 2:
Input:
s = "abpcplea", d = ["a","b","c"]
Output:
"a"
Note:
- All the strings in the input will only contain lower-case letters.
- The size of the dictionary won't exceed 1,000.
- The length of all the strings in the input won't exceed 1,000.
方法1:
heap创建最小堆,最长的word在堆顶,这里不需要考虑字典序大小的问题,在最小堆中,如果两个word的长度一样,会自动将字典序最小的那个放到堆顶。使用find函数判断某个字符是否在某个字符串里面。
i := b.find(c, i) 这句话的意思是将b.find()的结果赋值给i。c变量代表的字符是否在b中出现,从索引为i的位置开始往后查找,如果找到了,返回对应的索引,如果没找到返回-1.
:= 这个用法是在python3.8中加上的
import heapq
class Solution:
def findLongestWord(self, s: str, d: List[str]) -> str:
def isSubsequence(a: str, b: str) -> bool:
i = 0
for c in a:
if (i := b.find(c, i)) == -1:
return False
i += 1
return True
heap = [(-len(word), word) for word in d]
heapq.heapify(heap)
while heap:
word = heapq.heappop(heap)[1]
if isSubsequence(word, s):
return word
return ''