此篇为预留篇章,其中的算法有些还未使用Trie进行优化。
1023. Camelcase Matching
驼峰匹配。原题
1 | Input: queries = ["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"], pattern = "FB" |
方法一:竞赛时AC的方法。
1 | def camelMatch(self, queries: List[str], pattern: str) -> List[bool]: |
pattern
是否具有相同的大写字母。iter
保证了每次c开始的位置是从上一个匹配结束的地方开始的。这个非常重要,保证了比较的顺序。
1 | def camelMatch(self, qs: List[str], p: str) -> List[bool]: |
212. Word Search II
在矩阵中搜索多个单词,返回存在的单词。原题
1 | Input: |
方法一:和单词搜索一样,大体的原理还是回溯法,但是要考虑一些优化,所以用Trie 这里有个地方注意要在循环刚开始前将g[i][j]设为’#’不能过早地放在return 前。
1 | class TrieNode: |
211. Add and Search Word - Data structure design
和前缀单词查找树题一样,区别在于,这里搜索的时候可以使用’.’来匹配所有的字母。原题
1 | addWord("bad") |
方法一:Trie + dfs.
1 | class TrieNode: |
820. Short Encoding of Words
这个题描述的有点乱,简单来说就是将一个单词列表转成另一个单词列表,使前者的单词每一个都是后者的后缀。求列表的长度加上分隔符#。原题
1 | Input: words = ["time", "me", "bell"] |
方法一:因为数据不都大,所以直接用set。
1 | def minimumLengthEncoding(self, words: List[str]) -> int: |
1 | def minimumLengthEncoding(self, words: List[str]) -> int: |
1032. Stream of Characters
给定一些单词,查询字母,判断是否能和前k步的字母组成某个单词。原题
1 | StreamChecker streamChecker = new StreamChecker(["cd","f","kl"]); // init the dictionary. |
方法一:我写的方法和这个差不多,但是超时了,这里Lee用了一些内置的方法,才不会超时。但是耗时也很长。
1 | class StreamChecker: |
1 | class StreamChecker: |