字符串匹配问题
  • 先来了解一道常考的面试题:“判断给定字符串中的括号是否匹配”
  • 一般面试题目的描述都比较简单,在解答前,可以跟面试官进一步沟通一下题目要求和细节。以这道题为例,可以跟面试官确认括号的范围,是不是只考虑大中小括号就可以,包不包括尖括号;对函数的入参和返回值有没有什么样的要求;需不需要考虑针对大文件的操作等。
  • 我们假定细化后本题的要求为:只考虑大中小括号;不考虑针对大文件的操作,以字符串作为入参,返回值为布尔类型;未出现括号也算作匹配的情况。那么,解题思路如下。
  • 字符匹配问题可以考虑使用栈的特性来处理。
  • 遇到左括号时入栈,遇到右括号时出栈对比,看是不是成对的括号。
  • 当匹配完成时,如果栈内为空说明匹配,否则说明左括号多于右括号。
字符串解题思路

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

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

String matches 匹配整个字符串 字符串匹配问题_字符串匹配


String matches 匹配整个字符串 字符串匹配问题_数据结构_02


String matches 匹配整个字符串 字符串匹配问题_字符串_03