思路:可以参考岛屿问题的解法,先遍历找到和word第一个字符相同的坐标,然后以这个坐标为起点用dfs算法遍历其上下左右的字符是否符合条件,由于遍历的时候对坐标上的字符进行修改,遍历后还需要回溯。
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)){
if(dfs(board,i,j,word,0)) return true;
}
}
}
return false;
}
private boolean dfs(char[][] board,int i,int j,String word,int k){
if(i<0||i>=board.length||j<0||j>=board[0].length||k>=word.length()||board[i][j]!=word.charAt(k)){
return false;
}
if(k==word.length()-1){
return true;
}
board[i][j]='\0';
boolean res = dfs(board,i+1,j,word,k+1)||dfs(board,i-1,j,word,k+1)
||dfs(board,i,j-1,word,k+1)||dfs(board,i,j+1,word,k+1);
board[i][j]=word.charAt(k);
return res;
}