解决这题的关键在于判断括号是否成对出现.
思路:
设置2个栈,第一个栈输入字符串s中所有的括号
第二个栈用于存储第一个栈弹出的括号。
如果第二个栈的栈顶元素和第一个栈的栈顶元素为成对的括号,则将两个括号的内容都弹出,否则继续存储第一个栈的括号
如果最后第二个栈为空,则证明每一个括号都是成对出现。输出true
否则为false.
#include <iostream>
#include <stack>
#include<unordered_map>
using namespace std;
int main() {
string s;
cin>>s;
stack<char> stk;
for(char i:s){
if(i == '[' || i == ']' || i== '(' || i == ')'){
stk.push(i);
}
}
unordered_map<char,char> st1;
st1.emplace('[',']');
st1.emplace('(',')');
if(stk.empty()){
cout<<"true";
}else{
stack<char> k;
while (!stk.empty()){
if(k.empty()){
k.push(stk.top());
stk.pop();
}else{
if(st1[stk.top()] == k.top()){
stk.pop();
k.pop();
}else{
k.push(stk.top());
stk.pop();
}
}
}
if(k.empty()){
cout<<"true";
}else{
cout<<"false";
}
}
}

京公网安备 11010502036488号