您的位置:首页 > 其它

lintcode :单词搜索

2016-01-25 15:04 357 查看
题目

单词搜索

给出一个二维的字母板和一个单词,寻找字母板网格中是否存在这个单词。

单词可以由按顺序的相邻单元的字母组成,其中相邻单元指的是水平或者垂直方向相邻。每个单元中的字母最多只能使用一次。

样例

给出board =

[

"ABCE",

"SFCS",

"ADEE"

]

word = "ABCCED", ->返回 true,

word = "SEE",-> 返回 true,

word = "ABCB", -> 返回 false.

解题

直接深度搜索

public class Solution {
/**
* @param board: A list of lists of character
* @param word: A string
* @return: A boolean
*/
public boolean exist(char[][] board, String word) {
// write your code here
return method(board,word);
}
public boolean method(char[][] board,String word){
int row = board.length;
int col = board[0].length;

for(int i=0;i<row;i++)
for(int j=0;j<col;j++){
if(dfs(board,i,j,0,word))
return true;

}
return false;
}
public boolean dfs(char[][] board,int row,int col,int index,String word){
if(word.length() == index){
return true;
}
if(row<0 || col<0||row>=board.length || col>=board[0].length) return false;
char ch = word.charAt(index);
if(board[row][col]!='+' && ch == board[row][col]){
char c = board[row][col];
board[row][col]='+';
boolean res = dfs(board,row-1,col,index+1,word)|| dfs(board,row+1,col,index+1,word)
||dfs(board,row,col-1,index+1,word)|| dfs(board,row,col+1,index+1,word);
board[row][col] = c;
return res;
}
return false;
}
}


Java Code
Python

class Solution(object):
def exist(self, board, word):
"""
:type board: List[List[str]]
:type word: str
:rtype: bool
"""
for i in xrange(len(board)):
for j in xrange(len(board[0])):
if self.dfs(board,i,j,word,0):
return True
return False

def dfs(self,board,row,col,word,index):
if index == len(word):
return True
if row<0 or col<0 or row>=len(board) or col>=len(board[0]):
return False
ch = word[index]
res = False
if(board[row][col]!='+' and board[row][col] ==ch):
c = board[row][col]
board[row][col] = '+'
res = self.dfs(board,row-1,col,word,index+1) or \
self.dfs(board,row,col-1,word,index+1) or \
self.dfs(board,row+1,col,word,index+1) or \
self.dfs(board,row,col+1,word,index+1)
if res:
return res
else:
board[row][col] = c
return False
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: