leetcode212. 单词搜索 II

举报
兔老大 发表于 2021/04/22 23:27:25 2021/04/22
【摘要】 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。 示例: 输入:  words = ["oath","pea","eat","...

给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词。

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。

示例:

输入: 
words = ["oath","pea","eat","rain"] and board =
[
  ['o','a','a','n'],
  ['e','t','a','e'],
  ['i','h','k','r'],
  ['i','f','l','v']
]

输出: ["eat","oath"]
说明:
你可以假设所有输入都由小写字母 a-z 组成。

思路:上一道题改一下,把每一个单词都判断一下即可。


  
  1. class Solution {
  2. private boolean[][] marked;
  3. // x-1,y
  4. // x,y-1 x,y x,y+1
  5. // x+1,y
  6. private int[][] direction = {{-1, 0}, {0, -1}, {0, 1}, {1, 0}};
  7. // 盘面上有多少行
  8. private int m;
  9. // 盘面上有多少列
  10. private int n;
  11. private String word;
  12. private char[][] board;
  13. //答案数组
  14. Set<String> ans=new HashSet<>();
  15. //判断一个字符
  16. public List<String> findWords(char[][] board, String[] words) {
  17. m = board.length;
  18. if (m == 0)return null;
  19. n = board[0].length;
  20. marked = new boolean[m][n];
  21. this.board = board;
  22. for(String s:words){
  23. for (int i = 0; i < m; i++)
  24. for (int j = 0; j < n; j++)
  25. marked[i][j]=false;
  26. this.word = s;
  27. for (int i = 0; i < m; i++)
  28. for (int j = 0; j < n; j++)
  29. if (dfs(i, j, 0))
  30. ans.add(s);
  31. }
  32. List<String> ansList=new ArrayList<>(ans);
  33. Collections.sort(ansList);
  34. return ansList;
  35. }
  36. private boolean dfs(int i, int j, int start) {
  37. if (start == word.length() - 1) {
  38. return board[i][j] == word.charAt(start);
  39. }
  40. if (board[i][j] == word.charAt(start)) {
  41. marked[i][j] = true;
  42. for (int k = 0; k < 4; k++) {
  43. int newX = i + direction[k][0];
  44. int newY = j + direction[k][1];
  45. if (newX >= 0 && newX < m && newY >= 0 && newY < n && !marked[newX][newY]) {
  46. if (dfs(newX, newY, start + 1)) {
  47. return true;
  48. }
  49. }
  50. }
  51. marked[i][j] = false;
  52. }
  53. return false;
  54. }
  55. }

 

文章来源: fantianzuo.blog.csdn.net,作者:兔老大RabbitMQ,版权归原作者所有,如需转载,请联系作者。

原文链接:fantianzuo.blog.csdn.net/article/details/104430212

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。