Given a 2D board and a list of words from the dictionary, find all words in the board.
Each word must be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be used more than once in a word.
此题和Word Search的区别是,这里有很多单词,也可以用DFS来解,但由于每一个单词都需要进行一次DFS搜索,这样速度会很慢。如果单词足够长而且每次都搜索完整个地图,时间复杂度就是最坏了,这对于大量数据是很困难的。
一种更好的方法是利用trie来做,将要搜索的单词添加到字典树中,然后从board的每一个元素搜索,如果往上下左右搜索的时候其元素可以在字典树中找到,就继续搜索下去,如果搜索到某个节点的时候发现这个节点构成了一个单词,就将该单词添加到结果集合中。如果在字典树中无法找到这个元素,那么就结束当前分支的搜索。
对于搜索过的点,可以再开一个二维数组来标记,也可以改变其值,搜索完后再改回来,这样做不需要额外的空间,速度也更快。
1 Trie是一个字典,所以初始化成{}
2 第一步将所有word加到字典树中