lintcode :单词搜索
2016-01-25 15:04
357 查看
题目
样例
给出board =
[
"ABCE",
"SFCS",
"ADEE"
]
word = "ABCCED", ->返回 true,
word = "SEE",-> 返回 true,
word = "ABCB", -> 返回 false.
解题
直接深度搜索
Java Code
Python
单词搜索
给出一个二维的字母板和一个单词,寻找字母板网格中是否存在这个单词。
单词可以由按顺序的相邻单元的字母组成,其中相邻单元指的是水平或者垂直方向相邻。每个单元中的字母最多只能使用一次。样例
给出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
相关文章推荐
- Android开发之2048安卓版
- 可变数组的操作插入删除
- 常用几何计算算法
- Android View之组合控件实例(二)
- synchronized详解
- js中双斜杠注释最好少用
- 单页Web应用:
- 《从零开始学Swift》学习笔记(Day 64)——Cocoa Touch设计模式及应用之目标与动作
- python 闭包
- JavaScript实现给定时间相加天数的方法
- 19个MySQL性能优化要点解析
- leetcode之Range Sum Query - Immutable
- 1. A "Getting Started" Guide for ROS and TurtleBot
- usb端点四种传输类型
- 数据结构学习笔记——数组与矩阵压缩
- [北京校区] 传智PHP怎么样?仅3日,40期59.49%学员就业,36.7%学员薪资过万
- QT 通过POST方法,上传文件到服务器
- (Genymotion)解决android: The connection to adb is down, and a severe error has occured.
- Linux下永久修改主机名
- matlab gui 按钮快捷键设置