利用栈来解决括号的匹配问题:
1.首先将字符串string的位置表示出来,运用循环结构。
2.因为遇到各式的左括号就进栈,所以处理方式统一,用switch语句来表示。
3.遇到左括号就进栈,遇到右括号则开始比较。首先判断:若读取栈中元素时为空,则匹配失败。其次:取出栈中元素进行比较,若配对成功,则弹出该元素;若不成功,则返回0。
4.字符串读取结束后,再对栈进行一个是否为空的比较,若不为空,则说明有多余的括号,匹配失败。
#include <iostream>
#include <stack>
using namespace std;
class Solution
{
public:
bool isValid(string s)
{
stack <char> a;
int len = s.length();
for (int i = 0; i < len; i++)
{
char ch = s[i];
switch (ch)
{
case '(':
case '[':
case '{':
a.push(ch);
break;
case')':
case']':
case'}':
if (a.empty())
{
return 0;
}
char chl = a.top();
if ((chl == '(' && ch == ')') || (chl == '[' && ch == ']') || (chl == '{' && ch == '}'))
{
a.pop(); //匹配即出栈,表示配对成功,否则返回错误
}
else return false;
}
}
if (a.empty())
return true;
else return false;
}
};