Given a string containing just the characters
'(', ')', '{', '}', '[' and ']', determine if the input string is valid.
The brackets must close in the correct order,
Basic idea is to scan the string from left to right and push left parenthesis in a stack and pop them whenever a right parenthesis is encountered and check for valid pair, If its not a valid pair then return false. At the end of the scan, stack should be empty as all left parenthesis should have been popped out to match for valid pairs with right pantheists.
"()" and "()[]{}" are all valid but "(]" and "([)]" are not.Basic idea is to scan the string from left to right and push left parenthesis in a stack and pop them whenever a right parenthesis is encountered and check for valid pair, If its not a valid pair then return false. At the end of the scan, stack should be empty as all left parenthesis should have been popped out to match for valid pairs with right pantheists.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | public class Solution { public boolean isValid(String s) { if(s == null || s.length() <2 ){ return false; } Stack stack = new Stack(); for(int i=0; i < s.length(); i++){ if(isLeftParanthesis(s.charAt(i)) ){ stack.push(s.charAt(i)); }else if(isRightParanthesis(s.charAt(i))){ if(!stack.isEmpty()){ char top = (char)stack.pop(); if(!isValidPair(top,s.charAt(i))){ return false; } }else{ return false; } } } if(!stack.isEmpty()){ return false; } return true; } public boolean isLeftParanthesis(char c){ return (c == '(' || c == '{' || c == '['); } public boolean isRightParanthesis(char c){ return (c == ')' || c == '}' || c == ']'); } public boolean isValidPair(char c1, char c2){ if(c1 == '(' && c2 == ')'){ return true; } if(c1 == '{' && c2 == '}'){ return true; } if(c1 == '[' && c2 == ']'){ return true; } return false; } } |
No comments:
Post a Comment