栈在括号问题中的应用
导言
大家好,很高兴又和大家见面啦!!!
在前面的内容中,我们详细介绍了栈在括号问题中的应用,相信大家看完后对括号问题的解题思路有了更加清晰的认识了。俗话说的好,磨刀不误砍柴工。在今天的内容中,我们就来通过几道习题来加深栈在括号问题中应用吧。
一、有效的括号——栈、字符串——简单
首先我们来看第一题,这一题是leetcode网中的一道题,原题链接在此奉上:20. 有效的括号。
1.1 题目要求与分析
接下来我们来看一下题目的要求,题目要求如下所示:
在这一题中,我们可以看到,它是一道最基本的括号匹配问题,由题目提示条件可知,本题中字符串的最大长度为10000,这个体量不算大,所以在这一题中我们既可以选用顺序栈来解题,也可以选用链栈来解题。
在这一题中,我会给大家介绍如何通过对数组进行相关操作来模拟实现栈,因此对于这一题的解题过程我采用的是顺序栈来进行解题。
既然我们现在时通过数组来模拟实现顺序栈,那么我们就需要能够创建一个存储数据的数组,以及指向栈顶的指针,即数组下标,如下所示:
代码语言:javascript复制#define MAXSIZE 10000
bool isValid(char* s) {
char S[MAXSIZE] = { 0 };//数据域
int i = 0;//栈顶指针
}
接下来按照括号问题的解题思路,我们在这一题中需要完成的内容有:
- 遍历原字符串;
- 找到左括号进行入栈;
- 对栈进行判空;
- 获取栈顶元素;
- 找到右括号进行匹配;
1.2 代码实现
接下来我们就按照上面的思路来一步一步的来实现对应的操作。首先是遍历原字符串,这里我们还是以for循环来进行遍历,如下所示:
代码语言:javascript复制for (int j = 0; s[j]; j ) //遍历原字符串
{
}
这里我们通过for循环实现了两个内容——判断当前的元素以及遍历字符串。
- 在for循环的判断条件中,当我们遍历的元素为括号时,此时对应的值为一个非零的值,我们可以顺利进入循环;当我们遍历的元素为
'