题目描述
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.
解题思路:
遇到左括号就压入栈中,遇到右括号就查看栈顶是否匹配,匹配的话就弹出来就好
最后栈是否为空来判断是否所有的括号都得到了匹配
代码:
class Solution {
public boolean isValid(String s) {
if(s.length()==0)
return true;
Stack<Character> stack = new Stack<Character>();
for(int i=0;i<s.length();i++){
Character c = s.charAt(i);
if(c=='(' || c=='[' || c=='{')
stack.push(c);
else{
if(stack.isEmpty())
return false;
if(c==')' && stack.peek()!='(')
return false;
if(c==']' && stack.peek()!='[')
return false;
if(c=='}' && stack.peek()!='{')
return false;
stack.pop();
}
}
return stack.isEmpty();
}
}
解题思路
括号匹配问题首先会想到用栈来解决—–栈一般用来处理匹配问题
将括号之间的匹配问题放到一个map中来处理
代码
class Solution {
public boolean isValid(String s) {
//括号匹配
//借助栈 与一个map来实现
Map<Character,Character> map = new HashMap<Character,Character>();
map.put('(',')');
map.put('[',']');
map.put('{','}');
Stack<Character> stack = new Stack<Character>();
if(s.length()==0)
return true;
for(int i=0;i<s.length();i++){
Character c = s.charAt(i);
switch(c){
case '(':
case '[':
case '{':
stack.push(c);
break;
case ')':
case '}':
case ']':
if(stack.isEmpty() || map.get(stack.pop())!=c)
return false;
}
}
return stack.isEmpty();
}
}