Given a string containing just the characters '('
, ')'
, '{'
, '}'
, '['
and ']'
, determine if the input string is valid.
The brackets must close in the correct order, "()"
and "()[]{}"
are all valid but "(]"
and "([)]"
are not.
Analysis:
The idea is to use stack to store and match () {} [],
when meet ( { [ push it into stack, meet ) } ] compare and pop stack
Java:
public boolean isValid(String s) {
int len = s.length();
if(len<=1||len%2==1) return false;
Stack<Character> pare = new Stack<>();
for(int i=0;i<len;i++){
if(s.charAt(i)=='('||s.charAt(i)=='['||s.charAt(i)=='{'){
pare.push(s.charAt(i));
}
else {
if(pare.empty())
return false;
else {
char top = pare.peek();
if((s.charAt(i)==')'&&top=='(')||(s.charAt(i)==']'&&top=='[')||(s.charAt(i)=='}'&&top=='{'))
pare.pop();
}
}
}
if(pare.empty()) return true;
else return false;
}
c++
bool isValid(string s) {
if(s.size()%2 == 1 || s.size() == 0)
return false;
vector<char> sta;
sta.push_back(s[0]);
for(int i=1; i< s.size(); i++){
if(s[i] == '(' || s[i]=='[' || s[i]=='{'){
sta.push_back(s[i]);
continue;
}
char current = sta.back();
if(s[i] == ')' && current != '(' )
return false;
if(s[i] == ']' && current != '[')
return false;
if(s[i] == '}' && current != '{')
return false;
sta.pop_back();
}
if(sta.size() != 0 ) return false;
return true;
}