Given a string containing justthe 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.
思路:映入眼帘想用hashmap或者set一个int加加减减,但后来发现有{([])}这种复杂的情况所以这个思路不work。
用stack去push,pop然后看是否empty是个可行的思路。
代码如下:
class Solution {
public boolean isValid(String s) {
if(s.length() % 2 != 0) return false;;
//string长度不是偶数就直接返回
Stack<Character> stack = new Stack<>();
for(int i = 0 ; i<s.length(); i++){
//example: {}(
if(s.charAt(i) == '{') stack.push('}');
else if(s.charAt(i) == '(') stack.push(')');
else if(s.charAt(i) == '[') stack.push(']');
//能进入下面这个条件从句的必定是括号的右半部分
//如果stack是空的,说明之前根本没有input任何左括号
//如果stack.pop出来的不等于charat(i)则此括号与put进的左括号不匹配
//满足任意一个条件则可返回false了
else if(stack.isEmpty() || stack.pop() != s.charAt(i) ) return false;
}
return stack.isEmpty();
}
}
时间——O(N) 空间——O(N)