给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()" 输出: true
示例 2:
输入: "()[]{}" 输出: true
示例 3:
输入: "(]" 输出: false
示例 4:
输入: "([)]" 输出: false
示例 5:
输入: "{[]}" 输出: true
学过数据结构和编译原理的应该一下就能想到用栈来实现这个功能。
给出一个只含有括号的字符串:
建立一个栈,如果栈为空,则把排在首位的字符压入栈中:
然后判断字符串的下一位是否和栈顶元素相匹配(如 '{' 和 '}'),如果匹配则将栈顶元素弹出栈:
当字符串全部判断完后,栈为空,则说明括号都是正确闭合的,字符串有效。
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
char[] chars = s.toCharArray();
for(char c : chars){
if(stack.size() == 0){
stack.push(c);
}else if((stack.peek() == '(' && c == ')')||
(stack.peek() == '[' && c == ']')||
(stack.peek() == '{' && c == '}')){
stack.pop();
}else{
stack.push(c);
}
}
return stack.size() == 0;
}
}
1.创建一个栈stack,将字符串s通过toCharArray()方法转变为字符数组chars。
2.用增强for循环遍历chars,如果栈为空,即stack.size()==0;则将字符压栈;如果栈不为空,则取栈顶元素stack.peek()与当前的字符进行比较;如果当前字符和栈顶元素相匹配,则将栈顶元素弹出stack.pop(),如果不匹配,则将当前字符压栈stack.push(c)。
3.for循环结束后返回栈是否为空return stack.size()==0;
java栈的基本操作:
1.实例化
Stack stack=new Stack();
2.判断是否为空
stack.empty()
3.取栈顶值(不出栈)
stack.peek()
4.进栈
stack.push(Object);
5.出栈
stack.pop();