題目:
思路一:
- 棧空
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)