el tablero y la palabra solo consisten en letras mayúsculas y minúsculas en inglés
No se permite el uso repetido de letras en la misma celda
Ideas de solución
Para buscar si está contenida la palabra completa, lo primero que se nos viene a la mente es usar el recorrido primero en profundidad, es necesario recorrer primero toda la matriz, encontrar la posición de la grilla donde el carácter es el mismo que el primero carácter en la palabra, y luego realice una búsqueda profunda en las cuadrículas adyacentes, hasta que se encuentre la palabra completa
Use dp para almacenar si cada cuadrícula se ha utilizado en este dfs, para asegurarse de que las letras en la misma celda no puedan reutilizarse
el código
classSolution{
privateint targetLength;publicbooleanexist(char[][] board,String word){
int row = board.length, col = board[0].length;
targetLength = word.length();boolean[][] visited =newboolean[row][col];for(int i =0; i < row; i++){
for(int j =0; j < col; j++){
if(dfs(board, word, visited,0, i, j)){
returntrue;}}}returnfalse;}publicbooleandfs(char[][] board,String word,boolean[][] visited,int depth,int x,int y){
// 越界if(x <0|| x >= board.length || y <0|| y >= board[0].length){
returnfalse;}// 字符不满足if(visited[x][y]|| board[x][y]!= word.charAt(depth)){
returnfalse;}if(depth +1== targetLength){
returntrue;}
visited[x][y]=true;boolean res =dfs(board, word, visited, depth +1, x -1, y)||dfs(board, word, visited, depth +1, x +1, y)||dfs(board, word, visited, depth +1, x, y -1)||dfs(board, word, visited, depth +1, x, y +1);
visited[x][y]=false;return res;}}