代码地址:https://github.com/RedemptionC/CourseraAlgorithms/tree/master/boggle
本题基本与leetcode212 单词搜索Ⅱ(https://leetcode-cn.com/problems/word-search-ii/)相同,实现trie的时候还可以把208 实现trie(208. 实现 Trie (前缀树))做了~
要求是给出一个board,上面每一个格子之上都有一个字母,题目会给出一个字典,里面有一些预定的单词,我们要做的是找出board相邻(上下左右对角线)的格子上的字母,如果能组成字典里的单词,就计分
所以本质上是个搜索问题:我们可以建立一个set,把字典里的单词都加入,然后在board上搜索,如果当前连成的单词在字典里,就积分
关键在于,要实现高效的查字典,我们不能直接用hashset里的contains,应该用startwith这种函数,一旦字典里没有当前这种字符串作为开头的单词,马上返回
这里我们要实现trie(字典树),来实现高效的查询
因为本题里的元素都是大写字母,只有26种,为了简单起见,我实现的是26 way trie
差不多就是这种:
上代码:
Trie
public class Trie {
private class Node {
private Integer value;
private Node[] next = new Node[26];
}
private Node root;
private int count;// for setting value
/** Initialize your data structure here. */
public Trie() {
root = new N