Given a 2D board and a list of words from the dictionary, find all words in the board.

Each word must 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 in a word.

For example,
Given words = ["oath","pea","eat","rain"] and board =

[
['o','a','a','n'],
['e','t','a','e'],
['i','h','k','r'],
['i','f','l','v']
]

Return ["eat","oath"].

题意:查找哪些单词在二维字母数组中出现

思路:1.用所有的单词建立字典树

   2.遍历二维数组中的所有位置,以这个位置开头向二维数组上下左右方向扩展的字符串是否在字典树中出现

  评论区还有一种用复数和字典树的解题方法,太帅了

 class Solution(object):
def findWords(self, board, words):
trie = {}
for w in words:
cur = trie
for c in w:
cur = cur.setdefault(c,{})
cur[None] = None
self.flag = [[False]*len(board[0]) for _ in range(len(board))]
self.res = set()
for i in range(len(board)):
for j in range(len(board[0])):
self.find(board,trie,i,j,'')
return list(self.res) def find(self,board,trie,i,j,str):
if None in trie:
self.res.add(str)
if i<0 or i>=len(board) or j<0 or j>=len(board[0]):
return
if not self.flag[i][j] and board[i][j] in trie:
self.flag[i][j] = True
self.find(board,trie[board[i][j]],i-1,j,str+board[i][j])
self.find(board,trie[board[i][j]],i+1,j,str+board[i][j])
self.find(board,trie[board[i][j]],i,j+1,str+board[i][j])
self.find(board,trie[board[i][j]],i,j-1,str+board[i][j])
self.flag[i][j] = False
return

最新文章

  1. UBUNTU 10.04上安装和使用HAMACHI
  2. 【Asp.Net-- 杂七杂八】的代码
  3. 笔记整理--Linux平台MYSQL的C语言
  4. ASP.NET Core 2.1 : 十二.内置日志、使用Nlog将日志输出到文件
  5. IOS高级开发之多线程(四)NSOperation
  6. SQLServer2008 查询分析器内容未保存,查找分析器内容
  7. es6中的双箭头函数
  8. ModelAttribute用法之一
  9. uva11183 最小树形图模板题
  10. Direct3D 11 Tutorial 6:Lighting_Direct3D 11 教程6:灯光
  11. Python3解析dex文件
  12. 异步请求Ajax(取得json数据)
  13. view之Scroller工具类和GestureDetector的简单用法
  14. js作为参数,并且返回值;js的回调模式 callback
  15. windows xp\2003 之上的操作系统多启动(多系统)引导
  16. Android-卖票案例static-不推荐此方式
  17. 使用addChildViewController手动控制UIViewController的切换
  18. 利用SQL表生成按日期序列的唯一ID
  19. django+mysql+html简单demo之 views+html
  20. HIS系统患者实体OO设计的一点思考

热门文章

  1. Richard Stallman:让我们关注和尊敬自由软件教父
  2. phpexcel 导入导出excel表格
  3. hdu 1253 胜利大逃亡 (广搜)
  4. jQuery基础之二(操作标签)
  5. 2017 jq 总结
  6. java8中对lamdba表达式方法参数传递时,方法重载之后的类型推断
  7. aarch64_j2
  8. avalonJS-源码阅读(二)
  9. 【转】WCF光芒下的Web Service
  10. oracle11g 创建id自增长监听器的步骤与问题