面试题 16.18. 模式匹配
题解:
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. 模式匹配相关推荐
- [Leedcode][JAVA][面试题 16.18][模式匹配][字符串][枚举]
[问题描述][中等] 你有两个字符串,即pattern和value. pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式.例如,字符串&quo ...
- 程序员面试金典 - 面试题 16.18. 模式匹配(逻辑题)
1. 题目 你有两个字符串,即pattern和value. pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式. 例如,字符串"ca ...
- 面试题 16.18. Pattern Matching LCCI
Title 你有两个字符串,即pattern和value. pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式.例如,字符串"cat ...
- 面试题16: 数值的整数次方
/******************************************************************* *<剑指Offer--名企面试官精讲典型编程题>C ...
- LeetCode Algorithm 面试题 16.10. 生存人数
面试题 16.10. 生存人数 Ideas 区间只有101年,直接建立一个长度为101的数组,然后遍历每个人的时候,把这个人从出生到死亡每一年的生存人数+1,最后输出第一个最大生存人数的位置索引就可以 ...
- [剑指offer]面试题16:反转链表
面试题16:反转链表 题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点.链表结点定义如下: struct ListNode {int value;ListNode *nex ...
- Java面试题16 牛客 以下java程序代码,执行后的结果是()
Java面试题16 牛客 以下java程序代码,执行后的结果是() 1 2 3 4 5 6 7 8 9 10 public class Test { public static void ma ...
- [Leedcode][JAVA][面试题 16.03. 交点]
[问题描述]面试题 16.03. 交点 给定两条线段(表示为起点start = {X1, Y1}和终点end = {X2, Y2}),如果它们有交点,请计算其交点,没有交点则返回空值.要求浮点型误差不 ...
- 程序员面试金典 - 面试题 16.16. 部分排序(排序/不排序)
文章目录 1. 题目 2. 解题 2.1 排序 2.2 不排序 1. 题目 给定一个整数数组,编写一个函数,找出索引 m 和 n ,只要将索引区间 [m,n] 的元素排好序,整个数组就是有序的. 注意 ...
最新文章
- 在 Linux 下确认 NTP 是否同步的方法
- 找斐波那契数列中的第N个数——递归与函数自调用算法
- jmeter5.0汉化
- Java lamda表达式快速分组
- Spring bean生命周期概览
- makefile工作笔记0001---认识使用makefile
- [转载]c#委托事件简单例子
- 龚胤全云栖大会_2017云栖大会北京峰会
- C# 泛型LIST转DataTable
- k3刷机 重置_斐讯K3刷LEDE固件成功刷机教程
- 服务器硬盘品牌型号认识,服务器的硬盘和主板能和FBD内存搭配的,现在主流的是什么品牌和型号啊?...
- FreeRTOS 任务调度 系统节拍
- Qt实现word文档转html
- js算法数组flat展平的几种方法
- 关于CORBA实现的介绍
- html中div标签圈套,HTML中div标签和span标签的应用
- 计算机桌面为什么没有语言栏了,电脑语言栏不见了的解决方法
- Mysql cpu 占用率非常高 300%
- 高效好用的bi数据分析工具
- 重置SEP管理控制台管理员密码