Valid Parentheses
Go to Discuss
Given a string containing just the characters '('
, ')'
, '{'
, '}'
, '['
and ']'
, determine if the input string is valid.
An input string is valid if:
- Open brackets must be closed by the same type of brackets.
- Open brackets must be closed in the correct order.
Note that an empty string is also considered valid.
Example 1:
Input: "()"
Output: true
Example 2:
Input: "()[]{}"
Output: true
Example 3:
Input: "(]"
Output: false
Example 4:
Input: "([)]"
Output: false
Example 5:
Input: "{[]}"
Output: true
Runtime Error
class Solution {
public:
bool isValid(string s) {
map<string,int> count;
stack<char> st;
count['(']=0;
count[')']=0;
count['{']=1;
count['}']=1;
count['[']=2;
count[']']=2;
if(s.empty()){
return true;
}
if(s.size()==1){
return false;
}
char s1=s[0];
st.push(s1);
string s_now = s.substr(1);
for(int i=0;i<s_now.size();i++){
if(count[s_now[i]]==count[s1.top()]){
st.pop();
continue;
}else{
st.push(s_now[i]);
}
}
if(st.empty()){
return true;
}else{
return false;
}
}
};
Accepted
class Solution {
public:
bool isValid(string s) {
std::stack<char> t;
for(int i = 0; i < s.size(); ++i){
if(s[i] == '(' || s[i] == '[' || s[i] == '{'){
t.push(s[i]);
}
else{
if(t.empty()) return false;
else{
if(t.top() == '(' || t.top() == '[' || t.top() == '{'){
if(!(t.top() == char(int(s[i])-1)|| t.top() == int(s[i] - 2))) return false;
else t.pop();
}
}
}
}
if(t.empty())
return true;
else
return false;
}
};
利用ASCII码来判断字符是否匹配: