leetcode: 模式匹配

LeetCode中的正则表达式和通配符匹配问题 使用滚动哈希集合将空间复杂度从 O(mn) 降低到 O(min(m, n))。优化状态转移方程,减少不必要的状态存储。使用记忆化递归处理较短字符串,减少重复计算。合理初始化和处理边界条件,避免不必要的状态存储。如果需要处理复杂的模式匹配任务,正则表达式是更好的选择,尽管其语法复杂性较高。如果仅需进行简单的文件名匹配或命令行操作,通配符更为高效且易于使用。在性能敏感的应用中,建议根据具体需求选择合适的工具。例如,在处理大量数据时,优先考虑使用通配符以提高性能。 阅读详情

题目

你有两个字符串,即pattern和value。 pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式。例如,字符串"catcatgocatgo"匹配模式"aabab"(其中"cat"是"a",“go"是"b”),该字符串也匹配像"a"、"ab"和"b"这样的模式。但需注意"a"和"b"不能同时表示相同的字符串。编写一个方法判断value字符串是否匹配pattern字符串。
示例 1:

输入: pattern = "abba", value = "dogcatcatdog"
输出: true
示例 2:

输入: pattern = "abba", value = "dogcatcatfish"
输出: false
示例 3:

输入: pattern = "aaaa", value = "dogcatcatdog"
输出: false
示例 4:

输入: pattern = "abba", value = "dogdogdogdog"
输出: true
解释: "a"="dogdog",b="",反之也符合规则
提示:
  • 0 <= len(pattern) <= 1000
  • 0 <= len(value) <= 1000
  • 你可以假设pattern只包含字母"a"和"b",value仅包含小写字母。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/pattern-matching-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

以下是我的go实现

func patternMatching(pattern string, value string) bool {
	// ac,bc 表示pattern中a和b出现的次数;al,bl 表示a和b模式对应的字符长度;c,l表示只有一种模式时候的次数和长度
	var ac, al, bc, bl, c, l int
	var as, bs, cs string
	// vl,pl表示value和pattern的长度
	var vl, pl = len(value), len(pattern)
	// 模式为空,则value为空为true,否则false
	if pl == 0 {
		if vl == 0 {
			return true
		}
		return false
	}
	// 遍历统计pattern中ac,bc
	for i := 0; i < pl; i++ {
		if string(pattern[i]) == "a" {
			ac++
		} else {
			bc++
		}
	}
	// 如果value为空,ac和bc都不为空,则返回false
	if vl == 0 {
		if ac != 0 && bc != 0 {
			return false
		}
	}
	// 只有a或b单一模式,value长度除与pattern长度则为每个模式对应的字符长度,则可以推导出模式对应字符,重复c次则为预计的字符串,与实际value比较则可以判断是否匹配
	if ac == 0 || bc == 0 {
		if ac == 0 {
			c = bc
		} else {
			c = ac
		}
		if vl%c != 0 {
			return false
		}
		l = vl / c
		cs = value[:l]
		if strings.Repeat(cs, c) == value {
			return true
		}
		return false
	}
	// 遍历可能的al,从0到vl
	for al = 0; al <= vl; al++ {
		// 计算对应的bl
		if (vl-ac*al)%bc == 0 {
			bl = (vl - ac*al) / bc
			if bl<0{
				continue
			}
		} else {
			continue
		}
		// 通过a和b的index,加上al和bl,可以推导出a和b对应的字符串as,bs
		var ai, bi int
		ai = strings.Index(pattern, "a")
		bi = strings.Index(pattern, "b")
		if ai == 0 {
			as = value[:al]
			bs = value[bi*al : bi*al+bl]
		} else {
			bs = value[:bl]
			as = value[ai*bl : ai*bl+al]
		}
		// 根据as和bs,带入到pattern,拼装出对应的字符串tmp
		var tmp = ""
		for i := 0; i < pl; i++ {
			if string(pattern[i]) == "a" {
				tmp += as
			} else {
				tmp += bs
			}
		}
		// tmp和value是否一致判断
		if tmp == value {
			return true
		}
	}
	return false
}

执行结果:通过
执行用时:0 ms
内存消耗:3.3 MB

LeetCode:请实现支持.和*的通配符模式匹配 题目:请实现支持’.‘and’’.的通配符模式匹配 ‘.’ 可以匹配任何单个字符。’’ 可以匹配任何字符序列(包括空序列)。匹配应该覆盖整个输入字符串(而不是部分)。 函数声明为:↵bool isMatch(const char *s, const char p) 整体思路: 如果下一个字符为 * ( 前面的字符可以出现0次,1次,无数次): 1.当 * 前面的字符 匹配了0个字符时,s不变,p向后移动两位 isMatch(s,p+2) 2.当 * 前面的字符匹配了1个或一串相同字符时,s向后移动一位,p 阅读详情

相关推荐

leetcode练习 通配符匹配

题目描述 给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。 ‘?’ 可以匹配任何单个字符。 ‘*’ 可以匹配任意字符串(包括空字符串)。 两个字符串完全匹配才算匹配成功。 说明 s 可能为空,且只包含从 a-z 的小写字母。 p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。 题目链接 思路 递归 如果"?"和"*"不在匹配子串中则直接比较字符串 若当前字符匹配,即 p[0] == s[0] 或 p[0] == '?',然后比较下一个字符,返回 isMatch(s[1:], p[1:]) 如果当前的字符模式是一个星号 p[0] =

LeetCode 面试题 16.18. 模式匹配

不能同时表示相同的字符串。编写一个方法判断value字符串是否匹配pattern字符串。,顺序取 pattern 中的每个字符,判断 value 对应位置是否匹配。“a”=“dogdog”,b=“”,反之也符合规则。组成,用于描述字符串中的模式。代码中用 lens 存储所有的有序对。),该字符串也匹配像。判断长度是否满足要求。

zheliku的博客 453

RK3588 InsightFace人脸识别移植及精度测试全解析

本文详细介绍了如何在RK3588平台上移植InsightFace人脸识别模型并进行精度验证。通过PyTorch转ONNX、ONNX转RKNN量化模型的关键步骤,实现了INT8量化模型的部署。测试数据显示,该模型在LFW数据集上达到99.43%的准确率(接近官方99.52%),推理时间仅14.23ms。ROC曲线和相似度分布图表明模型区分能力优秀,AUC超过0.99,满足实际应用需求。文中还详解了量化原理、环境搭建和测试方法,为边缘设备部署人脸识别提供了完整解决方案。

Hi20240217的博客 3666

LeetCode三道模式匹配算法题(同构字符串 一串三~)

好像回到小学语文课堂~ 🤣老师:ABB式 大家能想出哪些呀~😊我:绿油油~😁 金灿灿~😁哈哈哈哈哈

喻师傅的学习笔记 544

PCIe扫盲(三)

需要特别注意的是,PCIe的Spec中明确规定只有Root有权限发起配置请求(Originate Configuration Requests),也就是说PCIe系统里面的其他设备是不允许去配置其他设备的配置空间的,即peer-to-peer的配置请求是不允许的。当配置请求进行BDF路由的时候,正是依靠这些信息来确定要找的设备的。前面的文章还介绍过,Root和Switch的每一个端口中都包含一个P2P桥,并且知道桥的配置空间头(Configuration Space Header)是Type1型的。

Liuqz2009的专栏 2399

物联网技术(AIR780E cat1-4G模块+小程序+腾讯云MQTT)驱动的智能井盖系统设计(连载01)

终端设备采用AIR780E模块作为主控器,电子模块有三轴加速度传感器、可燃气体传感器,AIR780E模块(4G模块)通过MQTT通信协议进行数据打包上传至EMQX服务器,在EMQX服务器中,用户可以自行订阅主题和发布主题,小程序通过MQTT通信协议订阅EMQX服务器的主题,服务器通过接收到硬件发布的数据,转发到微信小程序。

leida_3669的博客 2217

【Leetcode刷题】字符串匹配

字符串匹配 Leetcode28.找出字符串中第一个匹配项的下标 Leetcode214.最短回文串 Leetcode459.重复的子字符串 Leetcode686.重复叠加字符串匹配 Leetcode1004.最大连续1的个数 III Leetcode1023.驼峰式匹配 Leetcode1392.最长快乐前缀 Leetcode1668.最大重复子字符串

m0_51976564的博客 1086

别再到处找包了!Keil5芯片支持包(Pack)最全管理指南:安装、更新、迁移与离线备份

本文详细解析了Keil5芯片支持包(Pack)的全生命周期管理,包括安装、更新、迁移与离线备份的工程化解决方案。针对STM32F10x等常见芯片,提供了高效获取Pack的策略、版本管理技巧及团队协作方案,帮助开发者解决常见的'Device Family Pack missing'等问题,提升嵌入式开发效率。

weixin_28729205的博客 539

【Leetcode小解析】正则表达式匹配

10. 正则表达式匹配 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。 '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。

qq_42898299的博客 857

工业质检新利器:手把手教你用AD-DINOv3实现零样本缺陷检测(附MVTec AD实战)

本文详细介绍了AD-DINOv3框架在工业质检中的应用,通过零样本异常检测技术解决传统方法的标注成本高和泛化能力弱问题。文章包含技术原理解析、MVTec AD数据集实战部署、模型训练流程及工业部署优化技巧,帮助读者快速掌握这一创新技术。

seed的博客 763

2025华为杯第二十二届中国研究生数学建模竞赛D题:低空湍流监测及最优航路规划 - 完整解题分析+完整MATLAB源码!(下篇)

🎓 本文收录于 《滚雪球学数学建模》专栏,本专栏专注于从零基础出发,带你循序渐进掌握数学建模的核心方法与思维路径。通过“滚雪球式”学习法,从最简单的生活化案例到经典建模工具,再到省赛、国赛真题实战演练,逐步积累知识与技能,帮助你搭建完整的建模体系。无论你是刚接触建模的新生,还是希望提升科研与竞赛能力的学者与工程师,本专栏都将为你提供一条清晰、高效、可实操的建模成长路线,助力你快速进阶,突破难点,迈向数学建模竞赛与实际应用的更高峰 🚀!

**My Coding Family** 1621

【力扣】面试16.18:模式匹配

题目描述 你有两个字符串,即pattern和value。 pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式。 例如,字符串"catcatgocatgo"匹配模式"aabab"(其中"cat"是"a",“go"是"b”),该字符串也匹配像"a"、"ab"和"b"这样的模式。但需注意"a"和"b"不能同时表示相同的字符串。 编写一个方法判断value字符串是否匹配pattern字符串。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/p

Heart_for_Ling的博客 657

self‑improving‑agent 安装与配置指南(OpenClaw)

长期记忆错误反思用户偏好学习持续进化AI → 反思 → 学习 → 改进。

tiantiantbtb的博客 1340

LeetCode:Word Pattern - 字符串模式匹配

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34413065的博客 154

渗透测试之哥斯拉实战

可以直接在这里使用meterpreter命令进行对服务端的控制。选择目标 - 添加,配置连接信息,之后测试连接成功!php的shell功能如图。先要进行数据库的配置信息。可以直接在这里打包全站。

大河之犬的博客 2488

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【每日一题】LeetCode. 面试题16.18. 模式匹配

每日一题,防止痴呆 = = 一、题目大意 你有两个字符串,即pattern和value。 pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式。例如,字符串"catcatgocatgo"匹配模式"aabab"(其中"cat"是"a",“go"是"b”),该字符串也匹配像"a"、"ab"和"b"这样的模式。但需注意"a"和"b"不能同时表示相同的字符串。编写一个方法判断value字符串是否匹配pattern字符串。 来源:力扣(LeetCode) 链接:https://leetcode-.

Johnson的博客 362

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

leetcode 面试题 16.18. 模式匹配

leetcode 面试题 16.18. 模式匹配 题目详情 题目链接 你有两个字符串,即pattern和value。 pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式。例如,字符串"catcatgocatgo"匹配模式"aabab"(其中"cat"是"a",“go"是"b”),该字符串也匹配像"a"、"ab"和"b"这样的模式。但需注意"a"和"b"不能同时表示相同的字符串。编写一个方法判断value字符串是否匹配pattern字符串。 示例 1: 输入: pattern = “ab

qq_33789406的博客 281

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【Leetcode刷题】字符串模式匹配算法知多少

标题:【Leetcode刷题】28. 实现 strStr() 原题链接:https://leetcode-cn.com/problems/implement-strstr/ 题目描述 实现 strStr() 函数。 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。 说明: 当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。 对于本题而言,.

天堂的鸽子 1006

leetcode面试题 16.18. 模式匹配(Python3)

文章目录leetcode面试题 16.18. 模式匹配方法:枚举思路:代码:结果: leetcode面试题 16.18. 模式匹配 你有两个字符串,即pattern和value。 pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式。例如,字符串"catcatgocatgo"匹配模式"aabab"(其中"cat"是"a","go"是"b"),该字符串也匹配像"a"、"ab"和"b"这样的模式。但需注意"a"和"b"不能同时表示相同的字符串。编写一个方法判断value字符串是否匹配patter

weixin_43422466的博客 297

leetcode 面试题 16.18. 模式匹配(pattern matching lcci)C语言

leetcode 面试题 16.18. 模式匹配(pattern matching lcci)C语言1.description2.solution 1.description https://leetcode-cn.com/problems/pattern-matching-lcci/ 你有两个字符串,即pattern和value。 pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式。例如,字符串"catcatgocatgo"匹配模式"aabab"(其中"cat"是"a",“go"是"b”

hsk6543210的博客 538

LeetCode-Py 字符串算法精讲:从基础到高阶模式匹配

在编程面试和算法竞赛中,字符串处理问题占据了相当大的比重。据统计,LeetCode 平台上超过 30% 的题目涉及字符串操作,而大厂面试中字符串相关问题的出现频率更是高达 40% 以上。你是否曾遇到过这样的困境: - 面对复杂的字符串匹配需求,暴力解法超时,却不知如何优化? - 看到 KMP、AC 自动机等高级算法时一头雾水,难以理解其核心思想? - 在实际项目中需要处理文本搜索、敏感词过滤等功...

gitblog_01003的博客 524

[leetcode]字符串模式匹配,阿里面试算法题

你有两个字符串,即pattern和value。 pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式。例如,字符串"catcatgocatgo"匹配模式"aabab"(其中"cat"是"a",“go"是"b”),该字符串也匹配像"a"、"ab"和"b"这样的模式。但需注意"a"和"b"不能同时表示相同的字符串。编写一个方法判断value字符串是否匹配pattern字符串。 示例 1: 输入: pattern = “abba”, value = “dogcatcatdog” 输出: true

iYhuitune的博客 559

leetcode面试题模式匹配

题目链接:模式匹配 题目描述: 你有两个字符串,即pattern和value。 pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式。例如,字符串"catcatgocatgo"匹配模式"aabab"(其中"cat"是"a",“go"是"b”),该字符串也匹配像"a"、"ab"和"b"这样的模式。但需注意"a"和"b"不能同时表示相同的字符串。编写一个方法判断value字符串是否匹配pattern字符串。 示例 1: 输入: pattern = “abba”, value = “dogcatc

JingleLiA的博客 299
上一篇: leetcode: 数组异或操作
下一篇: leetcode: 最接近的三数之和
剑髯202000
博客等级 码龄18年 2粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值