有效括号
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
思路:
因为如果字符串长度s为奇数,它一定不能闭合成功
用Stack创建栈stack,for循环来暴力枚举,如果为左括号,
则将其push到栈顶,如果为右括号,则进行匹配peek(),
取出栈顶元素进行匹配,若匹配成功将该元素删除用stack.pop()
若匹配失败返回false。
总结 :
还是要学会栈的工作原理,原理在上面,还有就是java中Stack类的一些方法。
class Solution{
public boolean isValid(String s){
if(s.length()%2==0){
Stack<Character> stack = new Stack<>();
for(int i=0;i<s.length();i++){
char c=s.charAt(i);
if(c=='('||c=='['||c=='{'){
stack.push(c);
}
else if(c==')'){
if(!stack.isEmpty()&&stack.peek()=='('){
stack.pop();
}
else{
return false;
}
}
else if(c=='}'){
if(!stack.isEmpty()&&stack.peek()=='{'){
stack.pop();
}
else{
return false;
}
}
else{
if(!stack.isEmpty()&&stack.peek()=='['){
stack.pop();
}
else{
return false;
}
}
}
return stack.isEmpty();
}
return false;
}
}
赠送:stack中的一些方法
1 | boolean empty() 测试堆栈是否为空。 |
---|---|
2 | Object peek( ) 查看堆栈顶部的对象,但不从堆栈中移除它。 |
3 | Object pop( ) 移除堆栈顶部的对象,并作为此函数的值返回该对象。 |
4 | Object push(Object element) 把项压入堆栈顶部。 |
5 | int search(Object element) 返回对象在堆栈中的位置,以 1 为基数。 |