79. 单词搜索-极致优化,可行性剪枝和顺序剪枝

article/2025/6/16 19:33:31

        给你一个目标字符串,和一个二维字符数组,判断在数组中是否能找到目标字符串。

                

        例如,board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED"

算法思路

  1. 以每个单元格作为搜索起点,使用深度优先搜索(DFS)寻找可能匹配目标单词的路径

  2. DFS实现要点:

    • 终止条件:当匹配位置pos达到目标单词长度时,说明找到完整路径
    • 搜索过程:从当前位置向四个方向扩展,检查边界条件并进行回溯
    • 防重处理:在递归入口检查是否已访问,并验证当前字符是否匹配目标单词首字母
  3. 优化策略:

    • 可行性剪枝:若目标单词中某字符出现频率超过board中的总数,直接终止
    • 顺序优化:当目标单词尾字符出现频率低于首字符时,翻转单词可减少无效分支
      class Solution {
      public:static constexpr int dx[4] = {0,0,-1,1},dy[4] = {-1,1,0,0};bool dfs(int x,int y,int pos,string &word,int m,int n,vector<vector<char>>& board,vector<vector<int>>& vis) {if (pos == word.size()) {return true;}for (int i = 0;i < 4;i++) {int bx = dx[i] + x,by = dy[i] + y;if (bx < 0 || bx >= m || by < 0 || by >= n || board[bx][by] != word[pos] || vis[bx][by]) {continue;} vis[bx][by] = 1;if(dfs(bx,by,pos + 1,word,m,n,board,vis)) return true;vis[bx][by] = 0;}return false; }bool exist(vector<vector<char>>& board, string word) {int m = board.size(),n = board[0].size();vector<vector<int>> vis(m,vector<int> (n,0));unordered_map<char,int> bd_cnt;for (auto &row : board) {for (auto &p : row) {bd_cnt[p]++;}}unordered_map<char,int> word_cnt;if (word_cnt[word.back()] < word_cnt[word[0]]) {ranges::reverse(word);}for (auto &w : word) {if(++word_cnt[w] > bd_cnt[w]) return false;}for (int i = 0;i < m;i++) {for (int j = 0;j < n;j++) {if (board[i][j] == word[0]) {vis[i][j] = 1;if (dfs(i,j,1,word,m,n,board,vis)) {return true;}else{vis[i][j] = 0;}}}}return false;}
      };

                时间复杂度:O(mn3^4),m和n为行列数,对于每个入口最多有三个分支(因为上一个点已经搜索了一个方向),所以为O(mn3^4)

                空间复杂度:O(1)

 


http://www.hkcw.cn/article/aTImKJgmMp.shtml

相关文章

VLAN的作用和原理

1. 为什么要有vlan&#xff1f; 分割广播域&#xff0c;避免广播风暴&#xff0c;造成网络资源的浪费 可以灵活的组网&#xff0c;便于管理&#xff0c;同时还有安全加固的功能 2. vlan是怎么实现的&#xff1f;端口的原理&#xff1f; 设置VLAN后&#xff0c;流量之间的转…

使用MCP和Ollama本地创建AI代理:实操教程

如果你在过去几个月没有与世隔绝的话,那么你很可能看到过多篇提到新的模型上下文协议(MCP)的文章。 MCP是Anthropic发布的一个新标准,旨在弥合大型语言模型(LLMs)与外部世界之间的差距。MCP提供了一种标准化的方式,让模型能够访问资源——比如数据和工具——来帮助它们…

美防长被中方代表质问后答非所问 回避东盟立场问题

在第22届香格里拉对话会上,国防大学代表团成员张弛向美国防长赫格塞思提问:“你提到盟友和伙伴很重要。但是,美国近年在本地区建立的多边联盟和框架,例如美日澳印四边机制和美英澳三边安全伙伴关系,都没有包括东盟国家。所以,如果美国的联盟和东盟之间产生分歧或争端,你…

吴恩达MCP课程(3):mcp_chatbot

原课程代码是用Anthropic写的&#xff0c;下面代码是用OpenAI改写的&#xff0c;模型则用阿里巴巴的模型做测试 .env 文件为&#xff1a; OPENAI_API_KEYsk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx OPENAI_API_BASEhttps://dashscope.aliyuncs.com/compatible-mode…

新视角!经济学顶刊QJE用文本分析探究新技术扩散

美国圣路易斯联邦储备银行Aakash Kalyani、美国斯坦福大学与国家经济研究局Nicholas Bloom、英国伦敦商学院Marcela Carvalho和其合作者们共同研究的“The Diffusion of New Technologies&#xff08;新技术的扩散&#xff09;”在顶刊The Quarterly Journal of Economics中发表…

动态规划-376.摆动序列-力扣(LeetCode)

一、题目解析 看着题目上的解释或许有点难以理解&#xff0c;这里一图流 只要形似上图的都可以是摆动序列&#xff0c;如左图&#xff0c;且仅含一个元素和两个元素的也算摆动序列&#xff0c;如右图 二、算法原理 1、状态表示 根据经验我们都是以i位置为结尾时&#xff0c…

【机器学习基础】机器学习入门核心算法:XGBoost 和 LightGBM

机器学习入门核心算法&#xff1a;XGBoost 和 LightGBM 一、算法逻辑XGBoost (eXtreme Gradient Boosting)LightGBM (Light Gradient Boosting Machine) 二、算法原理与数学推导目标函数&#xff08;二者通用&#xff09;二阶泰勒展开&#xff1a;XGBoost 分裂点增益计算&#…

《STL--stack 和 queue 的使用及其底层实现》

引言&#xff1a; 上次我们学习了容器list的使用及其底层实现&#xff0c;相对来说是比较复杂的&#xff0c;今天我们要学习的适配器stack和queue与list相比就简单很多了&#xff0c;下面我们就开始今天的学习&#xff1a; 一&#xff1a;stack&#xff08;后进先出&#xff…

Redis缓存问题重点详解

前言&#xff1a;本节包含常见redis缓存问题&#xff0c;包含缓存一致性问题&#xff0c;缓存雪崩&#xff0c;缓存穿透&#xff0c;缓存击穿问题及其解决方案 1. 缓存一致性 我们先看下目前企业用的最多的缓存模型。缓存的通用模型有三种&#xff1a; 缓存模型解释Cache Asi…

Redis最佳实践——安全与稳定性保障之访问控制详解

Redis 在电商应用的安全与稳定性保障之访问控制全面详解 一、安全访问控制体系架构 1. 多层级防护体系 #mermaid-svg-jpkDj2nKxCq9AXIW {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-jpkDj2nKxCq9AXIW .error-ico…

矩阵快速幂算法快速上手

矩阵快速幂算法快速上手 一、基础知识回顾1.1 矩阵乘法1.2 单位矩阵 二、快速幂算法思想2.1 整数快速幂2.2 矩阵快速幂 三、矩阵快速幂的代码实现3.1 Python实现3.2 C实现3.3 Java实现 四、矩阵快速幂的应用场景4.1 斐波那契数列4.2 线性递推数列4.3 图论中的路径计数4.4 动态规…

外国人眼中的端午赛龙舟 文化共鸣与体验

当地人教恩佐包香囊,黄春隆体验划龙舟,罗珃身着汉服,沉浸式体验端午文化后拍照留念。吃粽子、赛龙舟、做香囊……外国友人对端午文化有多少了解?哪些端午习俗令他们印象深刻?恩佐来自法国中部卢瓦雷省的小城蒙塔日,他的家乡与中国渊源已久,是邓小平年轻时曾经勤工俭学的…

博主:登贝莱预定金球奖 欧冠决赛闪耀

巴黎圣日耳曼在欧冠决赛中以5-0大胜国米,首次夺得冠军。奥斯曼-登贝莱为队友送出了两次助攻。《队报》认为,他比以往任何时候都更有希望角逐2025年金球奖。作为俱乐部主席,纳赛尔-阿尔赫莱菲按惯例出现在颁奖台上,紧紧拥抱了奥斯曼-登贝莱,并在他耳边低语。这位卡塔尔人脸…

uniapp调试,设置默认展示的toolbar内容

uniapp调试&#xff0c;设置默认展示的toolbar内容 设置pages.json中 pages数组中 json的顺序就可以只需要调整顺序&#xff0c;不会影响该bar在页面中的显示默认展示第一条page

设计模式——适配器设计模式(结构型)

摘要 本文详细介绍了适配器设计模式&#xff0c;包括其定义、核心思想、角色、结构、实现方式、适用场景及实战示例。适配器模式是一种结构型设计模式&#xff0c;通过将一个类的接口转换成客户端期望的另一个接口&#xff0c;解决接口不兼容问题&#xff0c;提高系统灵活性和…

元胞自动机(Cellular Automata, CA)

一、什么是元胞自动机&#xff08;Cellular Automata, CA&#xff09; 元胞自动机&#xff08;CA&#xff09; 是一种基于离散时间、离散空间与规则驱动演化的动力系统&#xff0c;由 冯诺依曼&#xff08;John von Neumann&#xff09; 于1940年代首次提出&#xff0c;用于模…

华为OD机试真题——模拟消息队列(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025 A卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 2025华为OD真题目录+全流程解析/备考攻略/经验分享 华为OD机试真题《模拟消息队列》: 目录 题…

Nacos 配置文件总结

Nacos 配置文件总结 文章目录 Nacos 配置文件总结1 、在 Nacos 服务端添加配置文件1. 启动Nacos Server。2. 新建配置文件。3. 发布配置集后&#xff0c;我们便可以在配置列表中查看相应的配置文件。4. 配置nacos数据库5. 运行 Nacos 容器6. 验证安装结果7. 配置验证 2 、在 Na…

一文读懂MCP模型上下文协议

前言&#xff1a;MCP&#xff08;Model Context Protocol&#xff0c;模型上下文协议&#xff09;作为一个全新的开源协议框架被提出&#xff0c;它试图重塑模型开发、集成与协作的方式。MCP让只能人机交互的大模型转化为了能够快速对接各类业务系统的生产力大脑。传统做法通常…

C#数字图像处理(一)

文章目录 1.C#图像处理基础1.1 Bitmap类1.2 Bitmapdata类1.3 Graphics类1.4 Image类 2.彩色图像灰度化1.提取像素法2.内存法3.指针法三种方法的比较4.灰度图像二值化&#xff1a; 3.相关链接 Bitmap类、 Bitmapdata类和 Graphics类是C#图像处理中最重要的3个类,如果要用C# 进行…