日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Leetcode--Java--212. 单词搜索 II

發布時間:2023/12/18 java 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Leetcode--Java--212. 单词搜索 II 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

給定一個 m x n 二維字符網格 board 和一個單詞(字符串)列表 words,找出所有同時在二維網格和字典中出現的單詞。

單詞必須按照字母順序,通過 相鄰的單元格 內的字母構成,其中“相鄰”單元格是那些水平相鄰或垂直相鄰的單元格。同一個單元格內的字母在一個單詞中不允許被重復使用。

樣例描述

思路

Tire樹 + 哈希表

  • 將所有的單詞放到Trie樹上,只要是在樹的一個分支上走,就一定會有單詞,如果走不通或者沒有分支,就說明沒有這個單詞。
  • 哈希表維護所有的單詞。
  • 本質上用Tire樹來做剪枝,將所有可能的單詞(路徑)放到Tire樹上。
  • 代碼

    class Solution {//構造結點class TreeNode{String s; //記錄當前結尾字符為sTreeNode tns[] = new TreeNode[26];} TreeNode root = new TreeNode(); //根結點//實現Trie插入單詞public void insert(String word) {TreeNode p = root;for (char c: word.toCharArray()) {int u = c - 'a';if (p.tns[u] == null) {p.tns[u] = new TreeNode();} p = p.tns[u];}p.s = word;} //標記走過的boolean[][] vis = new boolean[15][15];//哈希表去重Set<String> set = new HashSet<>();public List<String> findWords(char[][] board, String[] words) {int m = board.length, n = board[0].length;//構造Trie樹for (String s: words) {insert(s);}//枚舉起點for (int i = 0; i < m; i ++ ) {for (int j = 0; j < n; j ++ ) {int u = board[i][j] - 'a';//要有該起點在Trie上有分支才進行枚舉if (root.tns[u] != null ) {vis[i][j] = true; //標記走過dfs(board, i, j, root.tns[u]);vis[i][j] = false;}}}List<String> res = new ArrayList<>();for (String word: set) {res.add(word);}return res;}public void dfs(char[][] board, int i, int j, TreeNode p) {//當前字符已經是結尾那個,就裝入結果集if (p.s != null) set.add(p.s);int dx[] = new int[]{0, 1, 0, -1};int dy[] = new int[]{1, 0, -1 ,0};//枚舉四個方向 for (int d = 0; d < 4; d ++ ) {int a = i + dx[d], b = j + dy[d];if (a < 0 || b < 0 || a >= board.length || b >= board[0].length || vis[a][b] == true) continue;int u = board[a][b] - 'a';//只有在Trie上存在分支,才往下走if (p.tns[u] != null) {vis[a][b] = true;dfs(board, a, b, p.tns[u]);vis[a][b] = false;}}} }

    總結

    以上是生活随笔為你收集整理的Leetcode--Java--212. 单词搜索 II的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。