文章目录

  • 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(回溯)相关推荐

  1. LeetCode 212. 单词搜索 II(Trie树+DFS)

    1. 题目 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻&qu ...

  2. LeetCode 140. 单词拆分 II(DP+回溯)

    1. 题目 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中.返回所有这些可能的句子. 说明: 分隔时可以重复使 ...

  3. leetcode: 212. 单词搜索II

    212. 单词搜索II 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/word-search-ii 给定一个 m x n 二维字符网格 board和 ...

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

    212. 单词搜索 II 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中&quo ...

  5. AC Leetcode 290. 单词规律

    290. 单词规律 给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律. 这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之 ...

  6. LeetCode 290. 单词规律(哈希)

    1. 题目 给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律. 这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之 ...

  7. LeetCode 79. 单词搜索(回溯DFS)

    1. 题目 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格.同一个 ...

  8. 【亡羊补牢】挑战数据结构与算法 第19期 LeetCode 212. 单词搜索 II(字典树,附上JS模板)

    仰望星空的人,不应该被嘲笑 题目描述 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成, ...

  9. LeetCode 140. 单词拆分 II

    文章目录 解法1:回溯 + 记忆数组,记录当前字符串 解法2:回溯 + 记忆数组,记录索引 `i` 到字符结尾的字符串能拆分的组合 https://leetcode-cn.com/problems/w ...

最新文章

  1. Iptables架构
  2. 华为诺亚ICLR 2020满分论文:基于强化学习的因果发现算法
  3. 从C语言的角度重构数据结构系列(五)-C语言的程序结构和基本语法
  4. SpringMVC中@GetMapping和@RequestMapping的区别
  5. 【技术好文转载】未来技术前瞻
  6. gulpfile php,Laravel利用gulp如何构建前端资源详解
  7. my-innodb-heavy-4G.cnf 配置文件参数介绍
  8. 九九乘法表Python+Java
  9. c++ 1:非MFC工程使用MFC库时的问题及解决办法(如果要用CString或者提示windows头文件重复包含)...
  10. (89)多周期时序约束(四)
  11. 举例让抽象问题具体化:二叉搜索树的后序遍历序列
  12. 浅谈Proxmark3 Easy Gui 4.0 5.0 5.1加强版
  13. JQuery判断radio是否选中并获取选中值的示例代码
  14. linux修改密码的几种方法
  15. Java获取当前时间(二)
  16. layer弹窗在键盘按回车将反复刷新_人生减负指南——iPad Pro+妙控键盘上手体验...
  17. Visual SourceSafe 2005 简体中文语言包
  18. h3c sr6608路由器IP限速
  19. Oracle客户端安装INS-30131
  20. WIN7系统电脑的administrator密码忘记怎么办

热门文章

  1. android 按键会触发ontouch吗?_Android实现炫酷的拖拽浮动按钮
  2. SparkSQL-从0到1认识Catalyst
  3. C++, ID、指针、handle (void *)的区别
  4. 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表
  5. gvim for php,转 : Gvim建立IDE编程环境 (Windows篇)
  6. linux内核的I2C子系统详解5——i2c_driver的注册、i2c_client的来源
  7. Unity3D_(游戏)控制物体的上、下、左、右移动
  8. 编译原理(五)自底向上分析之算符优先分析法
  9. margin 负边距应用
  10. 判断两个字符串是否由相同的字符组成