字母矩形中单词搜索 Word Search
来源:互联网 发布:经典面试算法题 编辑:程序博客网 时间:2024/05/16 18:51
问题:Given a 2D board and a word, find if the word exists in the grid.
word =
The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be used more than once.
For example, Given board =
[ ["ABCE"], ["SFCS"], ["ADEE"]]word =
"ABCCED"
, -> returns true
,word =
"SEE"
, -> returns true
,word = "ABCB"
, -> returns false
.
思路:第一想法就是先找首字母作为起点,然后进行dfs深度优先搜索。
可是,超时了。可是,想不到别的办法了啊。。智能的算法又不会。。。
人品差啊,为什么会超时呢?
我改进!
1、为了记录某位置已经访问过,直接换成'#'就行了。这样省去申请临时空间。
2、递归不要传入子串,直接传入字符串下标。
还是不行!怎么回事!
我检查!
原来,我边界条件写错了,少了一个等于的情况1。。。。太大意了了。边界条件是最重要的。
class Solution {public: bool dfs(vector<vector<char> > &board, int i, int j, string &s, int index) { if(index == s.size()) return true; if(i>=1 && board[i-1][j] == s[index]) { board[i-1][j] = '#'; if(dfs(board, i-1, j, s, index+1) ) return true; board[i-1][j] = s[index]; } if(i+1<board.size() && board[i+1][j] == s[index]) { board[i+1][j] = '#'; if(dfs(board, i+1, j, s, index+1) ) return true; board[i+1][j] = s[index]; } if(j>=1 && board[i][j-1] == s[index]) { board[i][j-1] = '#'; if(dfs(board, i, j-1, s, index+1)) return true; board[i][j-1] = s[index]; } if(j+1<board[0].size() && board[i][j+1] == s[index]) { board[i][j+1] = '#'; if(dfs(board, i, j+1, s, index+1)) return true; board[i][j+1] = s[index]; } return false; } bool exist(vector<vector<char> > &board, string word) { int row = board.size(); if(row == 0) return false; int col = board[0].size(); for(int i=0;i<row;i++) for(int j=0;j<col;j++) { if(board[i][j] == word[0]) { board[i][j] = '#'; if( dfs(board, i, j, word, 1) ) return true; board[i][j] = word[0]; } } return false; }};
0 0
- 字母矩形中单词搜索 Word Search
- Leetcode Word Search搜索文中单词
- DFS-lintcode单词搜索(word-search)
- LeetCode OJ 之 Word Search (单词搜索)
- LeetCode OJ 之 Word Search II (单词搜索 - 二)
- LeetCode 212. Word Search II(单词搜索)
- 123.Word Search-单词搜索(中等题)
- (每日算法)LeetCode --- Word Search(矩阵中查找单词)
- Word Search 单词的查找
- 【LeetCode-面试算法经典-Java实现】【079-Word Search(单词搜索)】
- leetcode 212. Word Search II 单词矩阵搜索 + DFS + 字典树
- Leetcode 212 Word Search II 单词查找
- LeetCode 79. Word Search(单词查找)
- word中单词大小写转换
- 联想词搜索 associative-word search
- 倒置英文字母中单词的字母顺序
- 212. Word Search II 在二维字母表里找到给定word集合中的word子串
- 在word中选择一个矩形区域
- 面向对象基础(1)--继承 多态 重构
- 孙宇 老师 SyPro项目部署成功 学习笔记
- UVa 539 - The Settlers of Catan 递归回溯
- 创建具有开源CMS的Web开发项目
- 再谈排列问题
- 字母矩形中单词搜索 Word Search
- android属性系统
- jstl遍历map集合中的list集合方法
- JVM工作原理之一:JVM装载与启动
- HTML颜色代码表
- C++虚函数表解析
- 官方QGis 编译帮助,源码工程中的Install文档。后面会放出我翻译的。
- kernel: TCP: time wait bucket table overflow错误的解决办法
- 《高效程序员的45个习惯 敏捷开发修炼之道》 - 书摘精要