dfs搜索,需要用到marked[][]标志,来解决已走过的路径。12ms
public class Solution {
public boolean exist(char[][] board, String word) {
int rows = board.length;
int cols = board[0].length;
int[][] marked = new int[rows][cols];
for(int i=0;i<rows;i++)
for(int j=0;j<cols;j++){
if(dfs(board,i,j,0,word,marked)){
return true;
}
}
return false;
}
private boolean dfs(char[][]board,int i,int j,int index,String targetWord,int[][]marked){
int rows = board.length;
int cols = board[0].length;
if(index==targetWord.length()){
return true;
}
if(i>=rows||i<0||j>=cols||j<0||marked[i][j]==1)
return false;
marked[i][j] = 1;
if(board[i][j]==targetWord.charAt(index)){
if(dfs(board,i+1,j,index+1,targetWord,marked)||dfs(board,i,j+1,index+1,targetWord,marked)||dfs(board,i-1,j,index+1,targetWord,marked)||dfs(board,i,j-1,index+1,targetWord,marked))
return true;
else{
marked[i][j]=0;
return false;
}
}else{
marked[i][j]=0;
return false;
}
}
}
本文介绍了一个使用深度优先搜索(DFS)算法实现字符串匹配的过程。通过递归的方式,在二维字符数组中寻找目标字符串是否存在,利用标记数组避免重复搜索已经访问过的路径。
456

被折叠的 条评论
为什么被折叠?



