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.
public class Solution {
public boolean isValid(String s) {
// Start typing your Java solution below
// DO NOT write main() function
Stack<Character> stack = new Stack<Character>();
for(int i=0; i<s.length(); i++){
char ch = s.charAt(i);
if(ch=='(' || ch=='[' || ch=='{')
stack.push(ch);
else{
if(ch==')'){
if(stack.size()==0 || stack.pop()!='(')
return false;
}
else if(ch==']'){
if(stack.size()==0 || stack.pop()!='[')
return false;
}
else if(ch=='}'){
if(stack.size()==0 || stack.pop()!='{')
return false;
}
}
}
if(stack.size()!=0)
return false;
return true;
}
}
Attention!!!: Need to check stack size before pop()!!!!
------------------------------------------------------------------------------------------------------------------------------------------
LL's solution:
public static boolean isValid(String s) {
int len = s.length();
if(len%2!=0||len<1)
return false;
Stack st = new Stack();
st.push(s.charAt(0));
int i = 1;
while(!st.isEmpty() || i<len){
char c = s.charAt(i);
if((c==')' && (char)st.peek()=='(') || (c=='}' && (char)st.peek()=='{') || (c==']' && (char)st.peek()=='['))
st.pop();
else if(c=='(' || c == '{' || c=='[')
st.push(c);
else
return false;
i++;
}
if(st.isEmpty())
return true;
else
return false;
}