题解:

https://leetcode-cn.com/problems/pattern-matching-lcci/solution/hua-liao-ge-hui-su-de-si-lu-tu-bian-jie-qing-kuang/

const patternMatching = (pattern, value) => {const map = new Map() // 保存a和b所对应的单词const set = new Set() // 用于确保map中的a和b不会对应相同的单词const match = (pattern, value, map, set) => { // pattern子串和value子串是否匹配if (pattern == '')        // 递归的出口 如果pattern为空字符串,但value不是return value == ''      // 则不匹配,否则,匹配const pChar = pattern[0]  // 获取pattern的首字符if (map.has(pChar)) {     // map中,如果pChar已经有对应的单词if (!value.startsWith(map.get(pChar))) // 如果value不是以该单词开头 返回falsereturn false                         // 否则继续考察剩余的pattern和valuereturn match(pattern.substring(1), value.substring(map.get(pChar).length), map, set)}for (let i = -1; i < value.length; i++) { // pChar可以是'',所以从-1开始const word = value.substring(0, i + 1)  // 从value串的开头截取不同长度的单词if (set.has(word)) continue          // 别的pChar已经对应了该单词 跳过该单词map.set(pChar, word)                 // 当前pChar和对应的单词存入mapset.add(word)                        // 单词存入set集合if (match(pattern.substring(1), value.substring(i + 1), map, set)) {return true     // match递归调用,考察剩余pattern和剩余的value串是否匹配}                 // 如果match的结果是true,直接返回true,否则进行下面的回溯map.delete(pChar) // map中删除pChar和它对应的单词set.delete(word)  // set中删除该单词,继续考察下一个单词}return false        // 遍历了所有情况,都没有返回true,只有返回false}return match(pattern, value, map, set) // 入口,整个pattern和整个value串是否匹配
};

面试题 16.18. 模式匹配相关推荐

  1. [Leedcode][JAVA][面试题 16.18][模式匹配][字符串][枚举]

    [问题描述][中等] 你有两个字符串,即pattern和value. pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式.例如,字符串&quo ...

  2. 程序员面试金典 - 面试题 16.18. 模式匹配(逻辑题)

    1. 题目 你有两个字符串,即pattern和value. pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式. 例如,字符串"ca ...

  3. 面试题 16.18. Pattern Matching LCCI

    Title 你有两个字符串,即pattern和value. pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式.例如,字符串"cat ...

  4. 面试题16: 数值的整数次方

    /******************************************************************* *<剑指Offer--名企面试官精讲典型编程题>C ...

  5. LeetCode Algorithm 面试题 16.10. 生存人数

    面试题 16.10. 生存人数 Ideas 区间只有101年,直接建立一个长度为101的数组,然后遍历每个人的时候,把这个人从出生到死亡每一年的生存人数+1,最后输出第一个最大生存人数的位置索引就可以 ...

  6. [剑指offer]面试题16:反转链表

    面试题16:反转链表 题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点.链表结点定义如下: struct ListNode {int value;ListNode *nex ...

  7. Java面试题16 牛客 以下java程序代码,执行后的结果是()

    Java面试题16 牛客 以下java程序代码,执行后的结果是() 1 2 3 4 5 6 7 8 9 10 public class Test {     public static void ma ...

  8. [Leedcode][JAVA][面试题 16.03. 交点]

    [问题描述]面试题 16.03. 交点 给定两条线段(表示为起点start = {X1, Y1}和终点end = {X2, Y2}),如果它们有交点,请计算其交点,没有交点则返回空值.要求浮点型误差不 ...

  9. 程序员面试金典 - 面试题 16.16. 部分排序(排序/不排序)

    文章目录 1. 题目 2. 解题 2.1 排序 2.2 不排序 1. 题目 给定一个整数数组,编写一个函数,找出索引 m 和 n ,只要将索引区间 [m,n] 的元素排好序,整个数组就是有序的. 注意 ...

最新文章

  1. 在 Linux 下确认 NTP 是否同步的方法
  2. 找斐波那契数列中的第N个数——递归与函数自调用算法
  3. jmeter5.0汉化
  4. Java lamda表达式快速分组
  5. Spring bean生命周期概览
  6. makefile工作笔记0001---认识使用makefile
  7. [转载]c#委托事件简单例子
  8. 龚胤全云栖大会_2017云栖大会北京峰会
  9. C# 泛型LIST转DataTable
  10. k3刷机 重置_斐讯K3刷LEDE固件成功刷机教程
  11. 服务器硬盘品牌型号认识,服务器的硬盘和主板能和FBD内存搭配的,现在主流的是什么品牌和型号啊?...
  12. FreeRTOS 任务调度 系统节拍
  13. Qt实现word文档转html
  14. js算法数组flat展平的几种方法
  15. 关于CORBA实现的介绍
  16. html中div标签圈套,HTML中div标签和span标签的应用
  17. 计算机桌面为什么没有语言栏了,电脑语言栏不见了的解决方法
  18. Mysql cpu 占用率非常高 300%
  19. 高效好用的bi数据分析工具
  20. 重置SEP管理控制台管理员密码

热门文章

  1. ansible不配置ssh免密钥,使用密码登录
  2. centos6.5安装mono
  3. 数据泵避免个别表数据的导出
  4. EasyPermisson 动态权限使用例子
  5. devsecops automation
  6. nginx+redis 实现 jsp页面缓存,提升系统吞吐率
  7. MuPlayer『百度音乐播放内核』
  8. Linux 命令(32)—— grep 命令
  9. 计算机设计思想 —— 解耦(分离)与内聚
  10. 测试到产品经理的进阶之路