单词搜索
题目
给出一个二维的字母板和一个单词,寻找字母板网格中是否存在这个单词。
单词可以由按顺序的相邻单元的字母组成,其中相邻单元指的是水平或者垂直方向相邻。每个单元中的字母最多只能使用一次。样例
给出board =
[
“ABCE”,
“SFCS”,
“ADEE”
]
word = “ABCCED”, ->返回 true,
word = “SEE”,-> 返回 true,
word = “ABCB”, -> 返回 false.题解
在矩阵中找到和word相同的第一个字符,开始进行DFS查找,搜索方向为前后左右四个方向。在递归是注意标注当前访问的矩阵字符。
public class Solution {
/**
* @param board: A list of lists of character
* @param word: A string
* @return: A boolean
*/
public boolean exist(char[][] board, String word) {
for(int i = 0; i< board.length; i++)
{
for(int j=0; j< board[0].length; j++)
{
if(board[i][j] == word.charAt(0))
{
boolean result = find(board, i, j, word, 0);
if (result)
{
return result;
}
}
}
}
return false;
}
private boolean find(char[][] board,int i,int j,String word,int start)
{
if (start == word.length())
{
return true;
}
if (i<0 || i>=board.length || j<0 || j>= board[0].length || board[i][j] != word.charAt(start))
{
return false;
}
board[i][j] = '#';
boolean result = (find(board, i-1, j, word, start+1)
|| find(board, i, j-1, word, start+1)
|| find(board, i+1, j, word, start+1)
|| find(board, i, j+1, word, start+1));
board[i][j] = word.charAt(start);
return result;
}
}
Last Update 2016.10.16