leetcode79 (recherche de mots: recherche approfondie DFS)

Question: Étant donné une grille bidimensionnelle et un mot, vérifiez si le mot existe dans la grille.

Les mots doivent être classés par ordre alphabétique et formés de lettres dans des cellules adjacentes, les cellules «adjacentes» étant celles qui sont adjacentes horizontalement ou verticalement. Les lettres de la même cellule ne peuvent pas être réutilisées.

Exemple:
board =
[
['A', 'B', 'C', 'E'],
['S', 'F', 'C', 'S'],
['A', 'D', «E», «E»]
]

Étant donné mot = "ABCCED", retourne vrai
Mot donné = "VOIR", renvoie vrai
Mot donné = "ABCB", renvoie faux

Solution: effectuez une recherche approfondie DFS, parcourez le tableau bidimensionnel et effectuez une recherche approfondie et une correspondance avec chaque élément du tableau bidimensionnel comme point de départ. Si la correspondance est réussie (les caractères peuvent être connectés pour obtenir la même chaîne que le mot contenu), alors true est renvoyé, si tout Renvoie false si le point de départ ne peut pas être apparié avec succès

class Solution {
    
    
     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(DFS(board,i,j,word,new boolean[board.length][board[0].length],0))
                    return true;
            }
        return false;

    }
    /*
     * x、y用于记录当前board数组中被匹配的字符位置。   
     * checkPos用于记录word中被匹配的字符位置,若checkPos的值为word.length(),
     * 则说明匹配成功。
     * 二维数组searched用于记录元素的状态(是否被搜索)
     */
    private boolean DFS(char[][]board,int x,int y,String word,boolean[][]searched,int checkPos){
    
    
         if(checkPos==word.length())
            return true;
        else if(board[x][y]!=word.charAt(checkPos))
            return false;
       searched[x][y]=true;
        int[][]move={
    
    {
    
    0,1},{
    
    0,-1},{
    
    1,0},{
    
    -1,0}};
        boolean result=false;
        for(int[] temp:move){
    
    
            int X=x+temp[0];
            int Y=y+temp[1];
            if(X>=0&&X<board.length&&Y>=0&&Y<board.length) {
    
    
               if (!searched[X][Y]&&DFS(board, X, Y, word, searched, checkPos + 1)){
    
    
                        result = true;
                        break;
                }
            }
        }
        searched[x][y]=false;
        return result;
    }
}

Je suppose que tu aimes

Origine blog.csdn.net/CY2333333/article/details/108569839
conseillé
Classement