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.
用stack实现, 左括号都push到stack中 注意返回时候是要确保stack为空才能true
时间O(n)
时间O(n)
public class Solution { public boolean isValid(String s) { if (s == null || s.length() == 0) { return false; } Stack<Character> stack = new Stack<Character>(); for (int i = 0; i < s.length(); i++) { if (s.charAt(i) == '(' ||s.charAt(i) == '[' || s.charAt(i) == '{') { stack.push(s.charAt(i)); } else if (s.charAt(i) == ')' || s.charAt(i) == ']' || s.charAt(i) == '}') { if (stack.size() == 0) { return false; } char c = stack.pop(); if (s.charAt(i) == ')') { if (c != '(') { return false; } } else if (s.charAt(i) == ']') { if (c != '[') { return false; } } else { if (c != '{') { return false; } } } } return stack.size() == 0; //防止有stack没清空 } } // public class Solution { public boolean isValid(String s) { HashMap<Character, Character> map = new HashMap<Character, Character>(); map.put('(', ')'); map.put('{', '}'); map.put('[', ']'); Stack<Character> stack = new Stack<Character>(); for (int i = 0; i < s.length(); i++) { if (map.containsKey(s.charAt(i))) { stack.push(s.charAt(i)); } else { if (stack.isEmpty() || map.get(stack.pop()) != s.charAt(i)) { return false; } } } return stack.isEmpty(); } }
没有评论:
发表评论