​LeetCode刷题实战291:单词规律II

LeetCode 291. 单词规律 II 虽然这里无法直接提供图文,但你可以按照上述步骤绘制流程图。将每个步骤用矩形框表示,函数调用用箭头连接,条件判断用菱形框表示,这样可以帮助你更好地理解和记忆代码。在匹配过程中,使用两个哈希表分别记录字符到子串和子串到字符的映射,确保映射的双向唯一性。中的不同长度的子串进行匹配,若匹配过程中出现矛盾则回溯,尝试其他的匹配方式。中的每个非空单词之间存在着双向连接的对应规律。这是一个典型的回溯算法问题。指完全匹配,也就是说在。通过回溯算法,依次尝试将。中的每个字母和字符串。是否遵循相同的规律。 阅读详情

算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !

今天和大家聊的问题叫做 单词规律II,我们先来看题面:

https://leetcode-cn.com/problems/word-pattern-ii/

Given a pattern and a string str, find if strfollows the same pattern.

Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empty substring in str.

给你一种规律 pattern 和一个字符串 str,请你判断 str 是否遵循其相同的规律。

这里我们指的是 完全遵循,例如 pattern 里的每个字母和字符串 str 中每个 非空 单词之间,存在着双向连接的对应规律。

示例

示例1:
输入: pattern = "abab", str = "redblueredblue"
输出: true

示例2:
输入: pattern = "aaaa", str = "asdasdasdasd"
输出: true

示例3:
输入: pattern = "aabb", str = "xyzabcxzyabc"
输出: false
 
提示:
你可以默认 pattern 和 str 都只会包含小写字母。

解题

https://www.cnblogs.com/grandyang/p/5325761.html

这道题是之前那道 Word Pattern 的拓展,之前那道题词语之间都有空格隔开,这样可以一个单词一个单词的读入,然后来判断是否符合给定的特征,而这道题没有空格了,那么难度就大大的增加了。

因为我们不知道对应的单词是什么,所以得自行分开,可以用回溯法来生成每一种情况来判断,这里还是需要用 HashMap 来建立模式字符和单词之间的映射,还需要用变量p和r来记录当前递归到的模式字符和单词串的位置,在递归函数中,如果p和r分别等于模式字符串和单词字符串的长度,说明此时匹配成功结束了,返回 ture,反之如果一个达到了而另一个没有,说明匹配失败了,返回 false。如果都不满足上述条件的话,取出当前位置的模式字符,然后从单词串的r位置开始往后遍历,每次取出一个单词,如果模式字符已经存在 HashMap 中,而且对应的单词和取出的单词也相等,那么再次调用递归函数在下一个位置,如果返回 true,那么就返回 true。

反之如果该模式字符不在 HashMap 中,要看有没有别的模式字符已经映射了当前取出的单词,如果没有的话,建立新的映射,并且调用递归函数,注意如果递归函数返回 false 了,要在 HashMap 中删去这个映射,参见代码如下:

class Solution {
public:
    bool wordPatternMatch(string pattern, string str) {
        unordered_map<char, string> m;
        return helper(pattern, 0, str, 0, m);
    }
    bool helper(string pattern, int p, string str, int r, unordered_map<char, string> &m) {
        if (p == pattern.size() && r == str.size()) return true;
        if (p == pattern.size() || r == str.size()) return false;
        char c = pattern[p];
        for (int i = r; i < str.size(); ++i) {
            string t = str.substr(r, i - r + 1);
            if (m.count(c) && m[c] == t) {
                if (helper(pattern, p + 1, str, i + 1, m)) return true;
            } else if (!m.count(c)) {
                bool b = false;
                for (auto it : m) {
                    if (it.second == t) b = true;
                } 
                if (!b) {
                    m[c] = t;
                    if (helper(pattern, p + 1, str, i + 1, m)) return true;
                    m.erase(c);
                }
            }
        }
        return false;
    }
};

好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力 。

上期推文:

LeetCode1-280题汇总,希望对你有点帮助!

LeetCode刷题实战281:锯齿迭代器

LeetCode刷题实战282:给表达式添加运算符

LeetCode刷题实战283:移动零

LeetCode刷题实战284:顶端迭代器

LeetCode刷题实战285:二叉搜索树中的顺序后继

LeetCode刷题实战286:墙和门

LeetCode刷题实战287:寻找重复数

LeetCode刷题实战288:单词的唯一缩写

LeetCode刷题实战289:生命游戏

LeetCode刷题实战290:单词规律

AIGC实战:用ComfyUI和Lora微调打造专属原神角色(含完整工作流) 本文详细介绍了如何利用ComfyUI和Lora微调技术打造专属原神风格角色,涵盖从环境配置、数据集准备到工作流构建和Lora训练的全过程。通过模块化节点设计和高级控制技术,创作者可实现高度个性化的AIGC艺术创作,提升二次元角色生成的效率与质量。 阅读详情

相关推荐

5G物理层基础知识

1、关于RB和RE (1) RB(Resource Block,资源块)频率上连续12个子载波,时域上一个slot(时隙,14个ofdm符号) (2) RE(Resource Element,资源单元)频率上一个子载波,及时域上一个ofdm符号 注意:协议规定,5G每个时隙(非扩展CP)的符号数为14个(扩展CP情况下每个时隙有12个符号),而LTE(非扩展CP)每个时隙的符号数为7个。 简单说:一个12X14的方格,大的整个叫一个RB,每一个小块叫一个RE。另外,一个RE可存放一个调制符号(mo.

qq_39074243的博客 2万+

【LeetCode - 291】单词规律 II

【困难】回溯算法

学哥斌的博客 769

IEC61850建模实战:从标准解读到ICD文件生成

本文详细介绍了IEC61850建模的实战过程,从标准解读到ICD文件生成,涵盖了变电站自动化系统的结构化数据模型设计。通过分层结构、标准服务映射和XML文件解析,帮助读者掌握电力系统智能电子设备的标准化建模方法,提升工程实施效率。

weixin_30823001的博客 415

291 单词规律 II

题目描述: 给你一种规律 pattern 和一个字符串 str,请你判断 str 是否遵循其相同的规律。 这里我们指的是 完全遵循,例如 pattern 里的每个字母和字符串 str 中每个 非空 单词之间,存在着 双射 的对应规律。双射 意味着映射双方一一对应,不会存在两个字符映射到同一个字符串,也不会存在一个字符分别映射到两个不同的字符串。 示例 1: 输入:pattern = “abab”, s = “redblueredblue” 输出:true 解释:一种可能的映射如下: ‘a’ -> “r

weixin_44171872的博客 508

FT2232HL JTAG下载器硬件设计指南:从引脚配置到电平转换实战

本文详细解析了FT2232HL JTAG下载器的硬件设计要点,包括引脚配置、电平转换电路设计及EEPROM配置技巧。通过实战案例展示如何利用FT2232HL实现高速JTAG通信,解决电平不匹配等常见问题,提升嵌入式开发效率。特别适合需要灵活JTAG接口的硬件工程师参考。

weixin_29194693的博客 255

保姆级教程:用BMS的HVIL检测电路,手把手教你排查高压互锁故障(附PWM/直流源方案对比)

本文详细解析了BMS中的HVIL检测电路,通过对比直流源与PWM两种方案,提供了一套系统化的高压互锁故障诊断流程。从电路原理到实战技巧,帮助维修人员精准定位故障根源,提升电动汽车高压系统的安全性和可靠性。

weixin_29300241的博客 391

Leetcode-单词规律C++实现

两个map分别以pattern和s为key,stringstream用来切分字符串,逐个将字符在map中进行比对,若没有被记录则加入到map中,若已经被记录了则比对是否匹配。拿map举例,find()方法返回值是一个迭代器,成功返回迭代器指向要查找的元素,失败返回的迭代器指向end。map和set两种容器的底层结构都是红黑树,所以容器中不会出现相同的元素,因此count()的结果只能为0和1,可以以此来判断键值元素是否存在(当然也可以使用find()方法判断键值是否存在)。

Vanderbiol的博客 198

SAP BSP网页开发入门:从SE80创建到MVC实战(附成品展示)

本文详细介绍了SAP BSP网页开发的入门与实战,从SE80环境搭建到MVC架构实现的全流程。通过具体案例和代码示例,帮助开发者掌握业务服务器页面(BSP)技术,提升SAP Web化转型中的开发效率,适用于需要扩展SAP功能的企业场景。

x1y2z的博客 1万+

LeetCode 291. 单词规律 II(回溯)

文章目录1. 题目2. 解题 1. 题目 给你一种规律 pattern 和一个字符串 str,请你判断 str 是否遵循其相同的规律。 这里我们指的是 完全遵循,例如 pattern 里的每个字母和字符串 str 中每个 非空 单词之间,存在着双向连接的对应规律。 示例1: 输入: pattern = "abab", str = "redblueredblue" 输出: true 示例2: 输入: pattern = "aaaa", str = "asdasdasdasd" 输出: true 示例3:

Michael是个半路程序员 1478

StarRocks 面试题及参考答案详解(万字详解)

Broker Load的过程通常涉及到数据的解析、转换和加载,它支持多种数据格式,并且可以处理复杂的数据导入任务。一方面,压缩可以减少磁盘I/O操作,因为压缩后的数据占用的空间更小,需要读取的数据块数量也就更少。在StarRocks中,表数据可以被划分成多个分区,每个分区包含表的一部分数据。在传统的行存储模型中,数据是按行组织的,这意味着在执行分析查询时,系统需要读取并处理整行数据,即使很多时候只需要查询其中的少数几列。物化视图的更新可以是完全重算,也可以是增量更新,取决于物化视图的定义和数据变更的模式。

大模型大数据攻城狮的专栏 2082

双端之Nginx+Php结合PostgreSQL搭建Wordpress

制作的 PG4WP 分支版本,它与所有版本的 WordPress 兼容,解决了原版的一些问题。参数,确保 PostgreSQL 正在监听默认端口(通常是 5432),或者你自定义的端口。:PG4WP 插件存在缺陷和不完整的功能,可能与最新版本的 WordPress 不兼容。的插件,它允许 WordPress 使用 PostgreSQL 数据库。,如果看到 Nginx 的默认欢迎页面,说明 Nginx 已正确安装。,如果看到 Nginx 的默认欢迎页面,说明 Nginx 已正确安装。

宇宙第一小趴菜的博客 1891

2022-01-17:单词规律 II。 给你一种规律 pattern 和一个字符串 str,请你判断 str 是否遵循其相同的规律。 这里我们指的是 完全遵循,例如 pattern 里的每个字母和字符

2022-01-17:单词规律 II。 给你一种规律 pattern 和一个字符串 str,请你判断 str 是否遵循其相同的规律。 这里我们指的是 完全遵循,例如 pattern 里的每个字母和字符串 str 中每个 非空 单词之间,存在着双向连接的对应规律。 力扣291。 答案2022-01-17: 递归。str=abcabc,pattern=xx。先让a=x,再让ab=x,再让abc=x。直到完全匹配为止。 代码用golang编写。代码如下: package main import "fmt" f

福大大架构师每日一题 2万+

Python 爬虫实战:华尔街见闻精选文章爬取(反反爬 + 投资情绪分析)

Python 爬虫实战:华尔街见闻精选文章爬取(反反爬 + 投资情绪分析)

yansideyucsdn的博客 970

LeetCode第291题_单词规律II

LeetCode 291题解析摘要 题目要求判断字符串str是否遵循给定pattern的规律,其中str可以任意分割。本文提供了回溯算法和哈希表两种解决方案。 关键点: 使用哈希表记录字符与子串的映射关系 回溯算法尝试所有可能的分割方式 需要同时检查字符映射和子串是否已被使用 代码实现特点: C#/Python/C++三语言实现 递归回溯框架 时间复杂度最坏O(n^m),空间复杂度O(m) 适用场景: 字符串模式匹配、回溯算法练习

qq_40263592的博客 1971

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

力扣(LeetCode)刷题,简单+中等题(第30期)

力扣(LeetCode)定期刷题,每期10道题,业务繁重的同志可以看看我分享的思路,不是最高效解决方案,只求互相提升。

不脱发的程序猿 7595

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【中等】力扣算法题解析LeetCode291:单词规律 II

题目要求判断字符串str能否按pattern的字符规律分割为双向唯一映射的子串。通过回溯+双哈希表实现:charToStr记录字符到子串的映射,strToChar确保子串不重复映射。DFS递归时,若字符已映射则检查子串匹配;未映射则遍历可能子串长度(动态计算maxLen剪枝),避免无效分支。每次递归后回溯撤销临时映射,最终验证完全匹配返回true。核心优化在于双射验证和剩余字符长度的剪枝处理。 关键词: 双射映射、回溯算法、DFS剪枝、哈希表、字符串匹配

ylumwd的博客 653

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

291. 单词规律 II ( 回溯 + 哈希 )

LeetCode:291. 单词规律 II 哈希表记录pattern每个字符与str的映射关系, 当找到一个没有存在的映射关系 或者 已经存在的映射关系时,进入下一层递归进行遍历。 每次选择前面的一部分,传递下一层递归的时候截取掉已经使用过的部分。 直到pattern中所有的字符都被使用完了,并且str也恰好遍历完,返回 true AC Code class Solution { Map<Character, String> map = new HashMap<&gt

lankerens 534

leetcode 291. 单词规律 II

回溯,回溯的时候检查是否满足条件,不满足直接回溯,而且还需要记录字符的index,若是后续的某个字符重复出现但是不满足条件,那么需要从这个字符最开始的地方开始回溯,不然会出问题的。 作者:九是否随意的称呼 链接:https://leetcode.cn/problems/word-pattern-ii/solutions/2755549/291-dan-ci-gui-lu-ii-by-shiheyingzhe-sw3e/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转

邹九的个人博客 588

leetcode刷题

如果 nums[first] + nums[n-2] + nums[n-1] < 0,由于数组已经排序,nums[first] 加上后面任意两个数都是小于 0 的,所以下面的双指针就不需要跑了。在窗口 X 内因为生气而被赶走的顾客数:使用大小为 X 的滑动窗口,计算滑动窗口内的grumpy[i]==1grumpy[i] == 1grumpy[i]==1时的customers[i]customers[i]customers[i],得到在滑动窗口内老板生气时对应的顾客数。当我们遇到「目录名」时,就把它放入栈。

qq_53811210的博客 3108

Swift 解锁单词规律 II:教你用回溯玩转模式映射逻辑!

LeetCode 291题目《单词规律II》是一道考察模式匹配和回溯算法的典型问题。题目要求判断目标字符串s能否按照pattern的字符顺序,以双向唯一映射的方式分割成对应子串。本文通过Swift代码详细解析解题思路: 算法核心:采用回溯法,通过递归尝试所有可能的子串分割方案 关键控制:维护两个数据结构 字符到单词的映射字典 已使用单词的集合(保证唯一性) 复杂度分析:最坏时间复杂度O(kⁿ),空间复杂度O(n) 应用场景:适用于模板解析、日志分类、语言分析等需要模式匹配的场景 该问题训练了双向映射控

记录从移动端、鸿蒙到物联网与AI的完整实战与思考。专注于分享可复用的工程方案与产品思维,尤其深入鸿蒙生态与全栈开发。以十年工程与管理沉淀,为你提供清晰的技术纵深路径。坚信技术的价值在于“贯通”与“落地”。 928

Java实现 LeetCode 212 单词搜索 II(二)

212. 单词搜索 II 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。 示例: 输入: words = ["oath","pea","eat","rain"] and board ...

南 墙 1万+

代码随想录+力扣刷题记录+华为机考准备记录

为了准备华为机考的刷题记录(不全)(已挂,春招再战)为了准备华为机考的刷题记录(不全)(已挂,春招再战)

LiangManqi0320的博客 2342

LeetCode 291-300 题详细解析

​:给定一个只包含'+'和'-'的字符串,两人轮流操作,每次可以将两个连续的'+'翻转为'--'。这里的匹配是双向的,且模式中的每个字符必须映射到字符串中的一个非空子串。​:给定一个只包含'+'和'-'的字符串,每次操作可以将两个连续的'+'翻转为'--',返回所有可能的操作结果。​:给定一个网格,1表示朋友的位置,0表示空地。​:根据秘密数字和猜测数字,返回提示:A表示数字和位置都正确,B表示数字正确但位置错误。使用两个堆:最大堆存储较小的一半数字,最小堆存储较大的一半数字,保持两个堆的大小平衡。

fengruxue的专栏 595

LeetCode刷题总结 - 面试经典 150 题 -持续更新

LeetCode刷题总结 - 面试经典 150 题 - 持续更新其他系列数组 / 字符串88. 合并两个有序数组27. 移除元素26. 删除有序数组中的重复项80. 删除有序数组中的重复项 II169. 多数元素189. 轮转数组121. 买卖股票的最佳时机122. 买卖股票的最佳时机 II55. 跳跃游戏274. H 指数380. O(1) 时间插入、删除和获取随机元素238. 除自身以外数组的乘积739. 每日温度42. 接雨水双指针125. 验证回文串392. 判断子序列167. 两数之和 II -

qq_45464560的博客 8746

LeetCode 290. 单词规律(Word Pattern) 41

290. 单词规律 290. Word Pattern 题目描述 给定一种规律 pattern和一个字符串str,判断 str 是否遵循相同的规律。 这里的遵循指完全匹配,例如,pattern里的每个字母和字符串str中的每个非空单词之间存在着双向连接的对应规律。 每日一算法2019/6/13Day 41LeetCode290. Word Pattern 示例1: 输入: patte...

weixin_30325071的博客 229

力扣面试经典150 —— 21-25题

力扣150题21~25

佚失的诗篇 1200
上一篇: 用了这么久 IDEA,你竟然不知道有个功能叫自动补全!
下一篇: 当用互联网 “黑话” 和女朋友谈恋爱时
编程IT圈
博客等级 码龄6年 1130粉丝 544原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值