dfs是什么意思_英语单词搜索软件

dfs是什么意思_英语单词搜索软件给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words,找出所有同时在二维网格和字典中出现的单词。单词必须按照字母顺序,通过 相邻的单元格 内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。示例 1:输入:board = [[“o”,”a”,”a”,”n”],[“e”,”t”,”a”,”e”],[“i”,”h”,”k”,”r”],[“i”,”f”,”l”,”v”]], words = [“oath”,

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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

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

在这里插入图片描述

示例 1:


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


输入:board = [["a","b"],["c","d"]], words = ["abcb"]
输出:[]
 

提示:

m == board.length
n == board[i].length
1 <= m, n <= 12
board[i][j] 是一个小写英文字母
1 <= words.length <= 3 * 104
1 <= words[i].length <= 10
words[i] 由小写英文字母组成
words 中的所有字符串互不相同
题解
Trie+暴力搜索

class Solution { 
   
public:
    static const int N = 3e4 + 10;
    int trie[N][26],cnt[N],idx;
    void insert(string &t){ 
   
        int p = 0;
        for(auto &c : t){ 
   
            int u = c - 'a';
            if(trie[p][u] == 0)trie[p][u] = ++idx;
            p = trie[p][u];
            if(cnt[p] != 1)cnt[p] = -1;
        }
        cnt[p] = 1;
    }
    vector<string>res;
    string t = "";
    int n,m;
    int vis[12][12],dx[4] = { 
   0,1,0,-1},dy[4] = { 
   -1,0,1,0};
    int flag[N] = { 
   0};
    set<string>ss;
    void dfs(int x,int y,vector<vector<char>>& board,int p){ 
   
        if(cnt[p] == 1){ 
   
            if(flag[p] == 0)res.push_back(t),flag[p] = 1;
        }else if(cnt[p] == 0){ 
   
            return;
        }
        if(x < 0 || x >= n || y < 0 || y >= m)return;
        if(vis[x][y])return;
        vis[x][y] = true;
        t.append(1,board[x][y]);
        for(int k = 0;k < 4;k ++){ 
   
            int a = x + dx[k],b = y + dy[k];
            if(trie[p][board[x][y] - 'a'] != 0)
            dfs(a,b,board,trie[p][board[x][y] - 'a']);
        }
        t.erase(t.size() - 1,1);
        vis[x][y] = false;
    }
    vector<string> findWords(vector<vector<char>>& board, vector<string>& words) { 
   
        for(auto &word : words)insert(word);
        cnt[0] = -1;
        n = board.size(),m = board[0].size();
        for(int i = 0;i < n;i ++){ 
   
            for(int j = 0;j < m;j ++){ 
   
                dfs(i,j,board,0);
            }
        }
        return res;
    }
};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168649.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【redis】一致性哈希算法

    【redis】一致性哈希算法前言这周复习redis,被集群和分布式搞得头大,也接触到一致性哈希算法,因此博主进行了一定得学习,故,写下这篇文章。一、普通哈希算法普通得哈希算法是对服务器得数量进行一定得取模预算得出,常见得公式如下:index=hash(key)%NN就是服务器得数量。我们可以想象到,如果服务器数量改变,那么index也会进行改变。例如:一台服务器宕机,服务里器的数据暂时丢失(系统会进行一定的备份,用户发送的请求经过哈希运算后,因为N的改变,会访问其他的服务器,但是该台服务器还没有拷贝过来宕机的数

    2022年7月27日
    10
  • Http请求URL长度限制[通俗易懂]

    Http请求URL长度限制[通俗易懂]http1.1协议原文http1.1协议中对url的长度是不受限制的,协议原文://https://www.ietf.org/rfc/rfc2616.txt3.2.1GeneralSyntax TheHTTPprotocoldoesnotplaceanyapriorilimitonthelengthofaURI.ServersM…

    2022年8月24日
    8
  • a javascript error occurred in_in from of是什么意思

    a javascript error occurred in_in from of是什么意思ERRORinapp.bundle.jsfromUglifyJs问题ERRORinapp.bundle.jsfromUglifyJsUnexpectedtoken:name«element»,expected:punc«;»[app.bundle.js:106,8]在用webpack对代码打包的时候报错,在网上找到了类似的答案,还是没有解决我的问题.能解…

    2025年11月27日
    3
  • OV7725的帧率和PCLK寄存器设置[通俗易懂]

    OV7725的帧率和PCLK寄存器设置[通俗易懂]一、OV7725的PCLK的改变和以下几个寄存器有关:    1:OX0D;2:0X11—————————————————————————————————————————————————

    2022年9月23日
    4
  • java微服务架构有哪些_漂浮服务区后端

    java微服务架构有哪些_漂浮服务区后端在本文中我们将主要研究目前主要的BaaS平台的功能,以及Google,Facebook,Apple等互联网巨头在BaaS领域的动作。同时我们也会关注国内一些主流BaaS平台的发展以及国内互联网巨头如百度,华为等在BaaS领域的投入发展。1.国外主流的BaaS平台 在BaaS领域,有几件事情值得关注:2013年4月,Facebook收购Parse;2013年12月,Paypal收…

    2025年5月27日
    6
  • 安卓系统usb调试在哪_安卓手机的usb调试

    安卓系统usb调试在哪_安卓手机的usb调试Android手机USB调试在哪?安卓手机如何打开USB调试模式?如果我们要将安卓手机连接到电脑上,从而传输文件、下载应用或ROOT等,都需要打开手机的USB调试模式。安卓系统的版本有很多,它们的打开方法也各不相同,下面给大家介绍各版本安卓手机打开USB调试模式的方法。步骤方法:一、2.1—2.3.7系统打开方法1、点击手机-Menu键(菜单键),在弹出的菜单中选择设置(Setting),或在应…

    2025年11月8日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号