leetcode_有效括号

给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

示例 1:
输入: “()”
输出: true

示例 2:
输入: “()[]{}”
输出: true

示例 3:
输入: “(]”
输出: false

示例 4:
输入: “([)]”
输出: false

示例 5:
输入: “{[]}”
输出: true

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21


class Solution{

public boolean isValid(String s){
Stack<Character> stack = new Stack<Character>;
for (char alp : s.toCharArray()){
if(alp == '(' ){
stack.push(')');
}else if(alp == '{'){
stack.push('}');
}else if(alp == '['){
stack.push(']');
}else if(stack.isEmpty()||stack.pop()!= alp){
return false;
}
}
return stack.isEmpty();
}

}

代码不长,一点一点看

首先,建立一个栈实例stack

记住他是后进先出
不了解Stack和Character的同学请点击
–>Stack类
–>Character类

有了一个栈,我们就有空去装东西了。

遍历

for循环里进行遍历,我们首先假设这个字符串是”( ( ( { } ) ) ) }”,那么结合实例,接下来代码的主要思想是:

  • 如果我遇到一个左括号,就往栈里加一个与这对应的右括号
  • 如果是右括号,比如第五个括号,那么就跟栈顶元素对比并且顶部元素出栈(栈是后进先出的,第五个括号是跟第四个对应的,所以遍历到第四个时往栈里添加的括号按照常理应该是跟第五个一样的)
    • 如果对比不一样,false
  • 由于对比一次就出栈一次,如果出完了,stack说自己一滴都不剩了,可alp居然还在遍历,有问题,原来的字符串绝对是奇数个字符,false
  • 如果运行到最后,没啥问题,判断stack,如果还剩元素,说明原来的右括号比左括号少,直接返回stack.isEmpty()就行了。
-------------本文结束感谢您的阅读-------------