给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: “()”
输出: true
示例 2:
输入: “()[]{}”
输出: true
示例 3:
输入: “(]”
输出: false
示例 4:
输入: “([)]”
输出: false
示例 5:
输入: “{[]}”
输出: true
题目链接: :link
解题思路:利用栈的先入后出思想,遇到(
,{
,]
入栈,遇到 )
,}
,]
出栈,进行比较。
#include <iostream>
#include <stack>
using namespace std;
class Solution{
public:
bool isValid(string s){
std::stack<char > whs;
for(int i = 0; i < s.size(); i++){
if( s[i] == '(' || s[i] == '{' || s[i] == '['){
whs.push( s[i] ); //入栈
}else{
if(!whs.empty()&&((s[i] == ')'&& whs.top() == '(') //判断栈是否为空,并且进行配对,
|| (s[i] == '}'&& whs.top() == '{')
|| (s[i] == ']'&& whs.top() == '[') ))
{
whs.pop();
}else{
return false;
}
}
}
return whs.empty(); //配对完成后,栈空则返回true
}
};
int main(){
Solution a;
string s;
cin>>s;
if(a.isValid(s)){
cout<<"true"<<endl;
}else{
cout<<"false"<<endl;
}
}