20. 有效的括号 --19/11/8
程序员文章站
2022-03-29 23:41:42
...
题目:
思路一:
- 栈空
1. } )]直接淘汰
2. ( [ {入栈 - 栈非空
1. 若] } )匹配则peek出栈,不匹配return
2. 若[ { ( 入栈 - 循环结束
- 栈空 true
- 非空 false
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
char[] arr = s.toCharArray();
for(int i = 0;i<arr.length;i++){
if(arr[i]==(']') || arr[i]==(')') || arr[i]==('}')
||arr[i]==('(')||arr[i]==('[')||arr[i]==('{')){
if(stack.empty()==true){
if(arr[i]==(']') || arr[i]==(')') || arr[i]==('}')){
return false;
}else{
stack.push(arr[i]);
}
}else{
if(arr[i]==('(')||arr[i]==('[')||arr[i]==('{')){
stack.push(arr[i]);
}else{
try{
if(stack.peek()==('(') && arr[i]==(')')){
stack.pop();
}
else if(stack.peek()==('[') && arr[i]==(']')){
stack.pop();
}
else if(stack.peek()==('{') && arr[i]==('}')){
stack.pop();
}else{
return false;
}
}catch(Exception e){
e.printStackTrace();
}
}
}
}
}
if(stack.empty()==true){
return true;
}else{
return false;
}
}
}
如果这段代码去面试,,,必挂
写的太丑了
思路二
我们可以不用栈,利用字符串匹配
即只要有括号相邻,就把它消去
s=s.replace("()","").replace("{}","").replace("[]","");
让字符串s一直循环执行这个操作,直到字符串的长度等于零(字符串只包含括号)
但是这种方法的时间复杂度为O(n2/2)
上一篇: 2022年 在何方 想什么 坚持什么