https://leetcode.com/problems/word-search/description/
코드설명
깊이우선탐색(DFS) + 문자열(String) 을 활용합니다.
모든 n x m 을 돌면서, 첫 시작단어가 같다면 단어를 DFS로 탐색해나갑니다.
이떄, 특이사항은 word.substring(1)으로 맨 첫번쨰 단어는 하나씩 제외하면서 이후의 단어들을 맞추어나갑니다.
코드
class Solution {
public boolean exist(char[][] board, String word) {
boolean ret = false;
for(int i=0; i<board.length; i++){
for(int j=0;j<board[i].length; j++){
if(board[i][j] == word.charAt(0)){
boolean[][] visited = new boolean[board.length][board[i].length];
visited[i][j] = true;
ret |= dfs(board, word.substring(1), i, j, visited);
}
}
}
return ret;
}
boolean dfs(char[][] board, String word, int r, int c, boolean[][] visited){
if(word.length() == 0){
return true;
}
boolean ret = false;
for(int[] dir : new int[][] { {-1, 0}, {1, 0}, {0, -1}, {0, 1}}){
int nr = r + dir[0];
int nc = c + dir[1];
if(nr < 0 || nr >= board.length || nc < 0 || nc >= board[0].length){
continue;
}
if( visited[nr][nc] == false && (board[nr][nc] == word.charAt(0))){
visited[nr][nc] = true;
ret |= dfs(board, word.substring(1), nr, nc, visited);
visited[nr][nc] = false;
}
}
return ret;
}
}
'알고리즘 > LeetCode' 카테고리의 다른 글
[LeetCode] 57. Insert Interval - 유니온파인드(UnionFind) OR 구현(Implementation) JAVA (0) | 2024.11.24 |
---|---|
[LeetCode] 74. Search a 2D Matrix - 이분탐색(BinarySearch) JAVA (0) | 2024.11.24 |
[LeetCode] 61. Rotate List - 구현(Implementation) JAVA (0) | 2024.11.20 |
[LeetCode] 62. Unique Paths - 동적계획법(DP, Dynamic Programming) JAVA (0) | 2024.11.20 |
[LeetCode] 49. Group Anagrams - 문자열(String) + 해시맵(HashMap) JAVA (0) | 2024.11.20 |