1 Star 0 Fork 2

coderush / beating-interviewer

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
单词搜索II.java 1.64 KB
一键复制 编辑 原始数据 按行查看 历史
package com.wujunshen.algorithm.leetcode.basic;
import java.util.ArrayList;
import java.util.List;
/**
* @author frank woo(吴峻申) <br>
* email:<a href="mailto:frank_wjs@hotmail.com">frank_wjs@hotmail.com</a> <br>
* @date 2022/7/23 23:52<br>
*/
public class 单词搜索II {
public List<String> findWords(char[][] board, String[] words) {
List<String> res = new ArrayList<>();
TrieNode root = buildTrie(words);
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[0].length; j++) {
dfs(board, i, j, root, res);
}
}
return res;
}
public void dfs(char[][] board, int i, int j, TrieNode p, List<String> res) {
char c = board[i][j];
if (c == '#' || p.next[c - 'a'] == null) {
return;
}
p = p.next[c - 'a'];
if (p.word != null) {
// found one
res.add(p.word);
// de-duplicate
p.word = null;
}
board[i][j] = '#';
if (i > 0) {
dfs(board, i - 1, j, p, res);
}
if (j > 0) {
dfs(board, i, j - 1, p, res);
}
if (i < board.length - 1) {
dfs(board, i + 1, j, p, res);
}
if (j < board[0].length - 1) {
dfs(board, i, j + 1, p, res);
}
board[i][j] = c;
}
public TrieNode buildTrie(String[] words) {
TrieNode root = new TrieNode();
for (String w : words) {
TrieNode p = root;
for (char c : w.toCharArray()) {
int i = c - 'a';
if (p.next[i] == null) {
p.next[i] = new TrieNode();
}
p = p.next[i];
}
p.word = w;
}
return root;
}
class TrieNode {
TrieNode[] next = new TrieNode[26];
String word;
}
}
Java
1
https://gitee.com/darkranger/beating-interviewer.git
git@gitee.com:darkranger/beating-interviewer.git
darkranger
beating-interviewer
beating-interviewer
master

搜索帮助