解法一:暴力法思路,遍历字符串,记录下碰到)]}之前的最后一个([{,然后在字符串中把这个匹配的删除,再重复遍历字符串
解法二:使用栈,问题具有最近相关性,每次碰到)]}都要看之前最近的([{,所以联想到使用栈来解决
public boolean isValid(String s) {
Map<Character, Character> map = new HashMap<>();
map.put(')', '(');
map.put(']', '[');
map.put('}', '{');
Stack<Character> stack = new Stack<>();
char[] charArray = s.toCharArray();
for(int i=0; i< charArray.length; i++) {
if(map.containsKey(charArray[i])) {
if(stack.isEmpty() || !map.get(charArray[i]).equals(stack.pop())) {
return false;
}
} else {
stack.push(charArray[i]);
}
}
return stack.isEmpty();
}
时间复杂度:一次遍历,所以是O(n)
空间复杂度:最坏的清空所有都进栈,O(n)
以后碰到问题有类似最近相关性的,可以尝试下使用栈能否解决