面试刷题第二天
LeetCode刷题——20. 有效的括号
1、题目描述
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
(1)左括号必须用相同类型的右括号闭合。
(2)左括号必须以正确的顺序闭合。
提示:
(1)1 <= s.length <= 104。
(2)s仅由括号 ‘()[]{}’ 组成。
2、解题思路
(1)准备一个栈;
(2)'([{'进栈;
(3)遇到右括号就出栈。
技巧:
(1)左括号进栈时,栈内存放对应的右括号,遍历到右括号时,只需要与之对比是否相等即可,不需要再一一判断。
(2)将输入的字符串转化为数组的形式,便于其他的语言编写,易读懂,且方便将系统的栈,用数组的形式代替。
Java代码一: 执行时长1ms
class Solution {
public boolean isValid(String s) {
if(s == null || s.length() == 0){
return true;
}
char[] str = s.toCharArray();
Stack<Character> stack = new Stack<>();
for(int i=0; i<str.length; i++){
char ch = str[i];
if(ch == '(' || ch == '[' || ch== '{'){
stack.add(ch == '(' ? ')' : (ch == '[' ? ']': '}'));
}else{
if(stack.isEmpty()){
return false;
}
char last = stack.pop();
if(ch != last){
return false;
}
}
}
return stack.isEmpty();
}
}
Java代码二: 执行时长0ms
class Solution {
public boolean isValid(String s) {
if(s == null || s.length() == 0){
return true;
}
char[] str = s.toCharArray();
int n = str.length;
int size = 0;
char[] stack = new char[n];
for(int i=0; i<str.length; i++){
char ch = str[i];
if(ch == '(' || ch == '[' || ch== '{'){
stack[size++] = ch == '(' ? ')' : (ch == '[' ? ']': '}');
}else{
if(size == 0){
return false;
}
char last = stack[--size];
if(ch != last){
return false;
}
}
}
return size == 0;
}
}