题目:给定一个只包含‘(’,‘[’,'{',')',']','}'的字符串,判断其是否一个合法的闭合字符串。
思路:可利用一个栈,遍历字符串,每碰到‘(’,‘[’,'{'则将其入栈,每碰到,')',']','}',则出栈一个字符,同时判断出栈的字符是否匹配当前字符,如果最后栈为空,则合法。
class Solution {
public:
bool isValid(string s) {
stack<char> s1;
int length=s.size();
if(length==0)return true;
if(length%2!=0)return false;
int i=length-1;
while(i>=0){
if(s[i]=='}'||s[i]==']'||s[i]==')'){
s1.push(s[i]);
i--;
}
else{
if(s[i]=='{'){
if(!s1.empty()&&s1.top()=='}'){
s1.pop();
i--;
}
else{
return false;
}
}
if(s[i]=='['){
if(!s1.empty()&&s1.top()==']'){
s1.pop();
i--;
}
else{
return false;
}
}
if(s[i]=='('){
if(!s1.empty()&&s1.top()==')'){
s1.pop();
i--;
}
else{
return false;
}
}
}
}
if(s1.size()==0)
return true;
else
return false;
}
};