Given a 2D board and a word, find if the word exists in the grid.
The word can 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.
For example,
Given board =
[
[‘A’,’B’,’C’,’E’],
[‘S’,’F’,’C’,’S’],
[‘A’,’D’,’E’,’E’]
]
word = “ABCCED”, -> returns true,
word = “SEE”, -> returns true,
word = “ABCB”, -> returns false.
一刷ac
解题思路:采用搜索的方法,遍历每个点,从每个点搜索是否和字符串第一个字符匹配,然后递归向上下左右匹配后面的字符。
public class Solution {
public boolean[][] visited;
public boolean exist(char[][] board, String word) {
visited = new boolean[board.length][board[0].length];
if(board == null || board.length == 0 || board[0].length == 0 || word == null || word.length() == 0) return false;
for(int i = 0; i < board.length; i++){
for(int j = 0; j < board[0].length; j++){
if(search(board, i, j, word, 0)) return true;
}
}
return false;
}
public boolean search(char[][] board, int row, int col, String word, int index){
if(index == word.length()) return true;
if(row < 0 || col < 0 || row >= board.length || col >= board[0].length || visited[row][col]) return false;
if(board[row][col] != word.charAt(index)) return false;
visited[row][col] = true;
boolean res = search(board, row+1, col, word, index+1)||search(board, row-1, col, word, index+1)||search(board, row, col+1, word, index+1)||search(board, row, col-1, word, index+1);
if(res) return res;
visited[row][col] = false;
return false;
}
}