学习笔记 | 详解字符串匹配

字符串匹配问题
  • 先来了解一道常考的面试题:“判断给定字符串中的括号是否匹配”

  • 一般面试题目的描述都比较简单,在解答前,可以跟面试官进一步沟通一下题目要求和细节。以这道题为例,可以跟面试官确认括号的范围,是不是只考虑大中小括号就可以,包不包括尖括号;对函数的入参和返回值有没有什么样的要求;需不需要考虑针对大文件的操作等。

  • 我们假定细化后本题的要求为:只考虑大中小括号;不考虑针对大文件的操作,以字符串作为入参,返回值为布尔类型;未出现括号也算作匹配的情况。那么,解题思路如下。

    • 字符匹配问题可以考虑使用栈的特性来处理。
    • 遇到左括号时入栈,遇到右括号时出栈对比,看是不是成对的括号。
    • 当匹配完成时,如果栈内为空说明匹配,否则说明左括号多于右括号。
字符串解题思路

接下来,总结一下字符串匹配类问题的解题技巧。

  • 首先要认真审题,避免答偏。可以先确定是单模式匹配问题还是多模式匹配问题,命中条件是否有多个。
  • 然后确定对算法时间复杂度或者内存占用是否有额外要求。
  • 最后要明确期望的返回值是什么,比如存在有多个命中结果时,是返回第一个命中的,还是全部返回。
关于解题思路。
  • 如果是单模式匹配问题,可以考虑使用 BM 或者 KMP 算法。
  • 如果是多模匹配,可以考虑使用 Tire 树来解决。
  • 在实现匹配算法时,可以考虑用前缀或者后缀匹配的方式来进行。
  • 最后可以考虑是否能够通过栈、二叉树或者多叉树等数据结构来辅助解决。
  • 建议了解一下常见的字符串单模、多模匹配算法的处理思路。
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值