栈在括号问题中的应用
导读
大家好,很高兴又和大家见面啦!!!
在前面的内容中我们详细介绍了栈与队列的相关知识点,并通过C语言实现栈与队列的基本操作。可是在我们做题时我们会发现我们很难将这些知识点与实际问题联系起来。
为了帮助大家更好的学习和使用栈与队列的相关知识点,从这个篇章开始,我们将介绍它们在实际问题中的几种运用。 在今天的篇章中,我们将来探讨一下栈的第一种应用——括号问题。下面我们一起来了解一下……
一、括号问题
括号问题也就是括号匹配问题,那什么是括号匹配呢?我们可以简单的理解为就是对于圆括号"()"、中括号"[]"和花括号"{}"这三种括号,它们要进行两两匹配的话只能够是'('与')'匹配、'['与']'匹配、'{'与'}'匹配这一种对应的左右括号匹配方式。
现在大家应该了解了什么是括号问题了。那在实际应用中对于这一类问题我们就有可能遇到以下几种应用:
- 给定一个存放这三种括号的字符数组,我们需要判断这些括号是否匹配;
- 给定一个存放这三种括号的字符数组,我们需要找出距离最长的有效括号;
- 给定一个存放这三种括号的字符数组,我们需要找出长度最长的有效括号;
如果大家有刷leetcode题库中的题目的话这两道题应该不会陌生,它们对应的就是leetcode题库中的下面两道题:
还没有做过的朋友或者说是没有思路的朋友下面我们一起在探讨的过程中顺便来解决一下这两道题。
对于这类问题我们应该如何来解决呢?下面我们就一起来探讨一下对应的算法思路;
二、算法思路
当我们在拿到一道括号问题时,我们可能会遇到各种各样的字符串,如:"()[]{}"、"(([{}]))"、"((}))"、"(([{}])){"……这些不同的括号字符串,这时如果我们想要对其进行匹配的话最简单的思路就是从左往右依次进行扫描,在依次扫描的过程中我们需要进行以下操作:
- 判断是否为括号——是括号说明未被扫描完,是'