LeetCode 291. 单词规律 II(回溯)
文章目录
- 1. 题目
- 2. 解题
1. 题目
给你一种规律 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 都只会包含小写字母。
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/word-pattern-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
class Solution {unordered_map<char, string> m;unordered_map<string, char> str_char;bool match = false;
public:bool wordPatternMatch(string pattern, string str) {dfs(pattern, str, 0, 0);return match;}void dfs(string& pattern, string& str, int i, int j){if((i < pattern.size() && j >= str.size())|| (i >= pattern.size() && j < str.size()) || match)return;if(i == pattern.size() && j == str.size()){match = true;return;}if(!m.count(pattern[i])){string val;for(int k = 1; k <= str.size()-j; ++k)//该字符往后匹配多少个字符{val = str.substr(j, k);if(str_char.count(val) && str_char[val] != pattern[i])//"ab","aa"continue;m[pattern[i]] = val;str_char[val] = pattern[i];dfs(pattern, str, i+1, j+k);m.erase(pattern[i]);str_char.erase(val);}}else{string val = m[pattern[i]];int n = val.size();if(str.substr(j, n) != val)return;dfs(pattern, str, i+1, j+n);}}
};
628 ms 52.5 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
LeetCode 291. 单词规律 II(回溯)相关推荐
- LeetCode 212. 单词搜索 II(Trie树+DFS)
1. 题目 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻&qu ...
- LeetCode 140. 单词拆分 II(DP+回溯)
1. 题目 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中.返回所有这些可能的句子. 说明: 分隔时可以重复使 ...
- leetcode: 212. 单词搜索II
212. 单词搜索II 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/word-search-ii 给定一个 m x n 二维字符网格 board和 ...
- Java实现 LeetCode 212 单词搜索 II(二)
212. 单词搜索 II 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中&quo ...
- AC Leetcode 290. 单词规律
290. 单词规律 给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律. 这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之 ...
- LeetCode 290. 单词规律(哈希)
1. 题目 给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律. 这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之 ...
- LeetCode 79. 单词搜索(回溯DFS)
1. 题目 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格.同一个 ...
- 【亡羊补牢】挑战数据结构与算法 第19期 LeetCode 212. 单词搜索 II(字典树,附上JS模板)
仰望星空的人,不应该被嘲笑 题目描述 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成, ...
- LeetCode 140. 单词拆分 II
文章目录 解法1:回溯 + 记忆数组,记录当前字符串 解法2:回溯 + 记忆数组,记录索引 `i` 到字符结尾的字符串能拆分的组合 https://leetcode-cn.com/problems/w ...
最新文章
- Iptables架构
- 华为诺亚ICLR 2020满分论文:基于强化学习的因果发现算法
- 从C语言的角度重构数据结构系列(五)-C语言的程序结构和基本语法
- SpringMVC中@GetMapping和@RequestMapping的区别
- 【技术好文转载】未来技术前瞻
- gulpfile php,Laravel利用gulp如何构建前端资源详解
- my-innodb-heavy-4G.cnf 配置文件参数介绍
- 九九乘法表Python+Java
- c++ 1:非MFC工程使用MFC库时的问题及解决办法(如果要用CString或者提示windows头文件重复包含)...
- (89)多周期时序约束(四)
- 举例让抽象问题具体化:二叉搜索树的后序遍历序列
- 浅谈Proxmark3 Easy Gui 4.0 5.0 5.1加强版
- JQuery判断radio是否选中并获取选中值的示例代码
- linux修改密码的几种方法
- Java获取当前时间(二)
- layer弹窗在键盘按回车将反复刷新_人生减负指南——iPad Pro+妙控键盘上手体验...
- Visual SourceSafe 2005 简体中文语言包
- h3c sr6608路由器IP限速
- Oracle客户端安装INS-30131
- WIN7系统电脑的administrator密码忘记怎么办
热门文章
- android 按键会触发ontouch吗?_Android实现炫酷的拖拽浮动按钮
- SparkSQL-从0到1认识Catalyst
- C++, ID、指针、handle (void *)的区别
- 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表
- gvim for php,转 : Gvim建立IDE编程环境 (Windows篇)
- linux内核的I2C子系统详解5——i2c_driver的注册、i2c_client的来源
- Unity3D_(游戏)控制物体的上、下、左、右移动
- 编译原理(五)自底向上分析之算符优先分析法
- margin 负边距应用
- 判断两个字符串是否由相同的字符组成