Word Search
来源:互联网 发布:阿里云栖大会2016 编辑:程序博客网 时间:2024/06/01 16:48
1.题目
给出一个二维的字母板和一个单词,寻找字母板网格中是否存在这个单词。
单词可以由按顺序的相邻单元的字母组成,其中相邻单元指的是水平或者垂直方向相邻。每个单元中的字母最多只能使用一次。
给出board =
[
"ABCE",
"SFCS",
"ADEE"
]
word = "ABCCED", ->返回 true,
word = "SEE",-> 返回 true,
word = "ABCB", -> 返回 false.
2.算法
我们对每个字母向上下,左右的字母进行深度搜索,由于用过的字母不能在用,我们维护一个boolean[board.length][board[0].length]的二维数组,用来标记是否用过
public boolean exist(char[][] board, String word) { // write your code here if (word == null || word.length() == 0) { return true; } if (board == null || board.length == 0 || board[0].length == 0) { return false; } boolean[][] used = new boolean[board.length][board[0].length]; for (int i = 0; i < board.length; i++) { for (int j = 0; j < board[0].length; j++) { if (search(board, word, 0, i, j, used)) { return true; } } } return false; } public boolean search(char[][] board, String word, int index, int i, int j, boolean[][] use) { if (index == word.length()) { return true; } if (i < 0 || j < 0 || i >= board.length || j >= board[0].length || use[i][j] == true || word.charAt(index) != board[i][j]) { return false; } use[i][j] = true; boolean res = search(board,word,index+1,i-1,j,use) || search(board,word,index+1,i+1,j,use) || search(board,word,index+1,i,j-1,use) || search(board,word,index+1,i,j+1,use); use[i][j] = false; return res; }
0 0
- Word Search
- Word Search
- word search
- Word Search
- Word Search
- Word Search
- Word Search
- Word Search
- Word Search
- Word Search
- Word Search
- Word Search
- Word Search
- Word Search
- Word Search
- Word Search
- Word Search
- Word Search
- 14My2.0版本聊天系统(服务器selector移植)
- PHP - FPM信号机制
- 欢迎使用CSDN-markdown编辑器
- 快速发布局域网WEB地图的方法
- 机器学习系列(3)_逻辑回归应用之Kaggle泰坦尼克之灾
- Word Search
- 堆与栈的区别
- 【BZOJ 2321】[BeiJing2011集训]星器 脑洞
- python数据类型(python cookbook读书笔记一)
- 机器学习中的特征——特征选择的方法以及注意点
- android services
- Spark商业案例与性能调优实战100课》第3课:商业案例之通过RDD分析大数据电影点评系各种类型的最喜爱电影TopN及性能优化技巧
- kali2.0 : msfpayload和msfencode的集成版msfvenom 使用简介
- 解决HttpServletResponse输出的中文乱码问题