BM44 有效括号序列
有效括号序列
https://www.nowcoder.com/practice/37548e94a270412c8b9fb85643c8ccc2
解题思路:
主要利用栈的先进后出的特性,可以去匹配{}[]()的成对出现。
做得好的:只要有思路,我就可以自己实现代码。 well done~!
做得不好:对栈的特性没有深入理解到各种案例中,特别是类似这种括号成对出现的匹配到。
还有,字符串 char的 数据对象是 Character ,下次不要再用 char_x+"",来转成String了,增加了堆内存分配。
import java.util.*;
public class Solution {
/**
* 我的解法
* @param s string字符串
* @return bool布尔型
*/
public boolean isValid (String s) {
if(s==null || s.length()==0) {
return false;
}
Stack<String> stack = new Stack<String>();
for(int i=0; i<s.length(); i++) {
String node = s.charAt(i)+"";
if(stack.isEmpty()) {
stack.push(node);
} else {
String top = stack.peek();
if("]".equals(node) && "[".equals(top)) {
stack.pop();
} else if("}".equals(node) && "{".equals(top)) {
stack.pop();
} else if(")".equals(node) && "(".equals(top)) {
stack.pop();
} else {
stack.push(node);
}
}
}
return stack.isEmpty();
}
/**
* 官方简洁做法
*/
public boolean isValid (String s) {
if(s==null || s.length()==0) {
return false;
}
Stack<Character> stack = new Stack<>();
for(int i=0; i<s.length(); i++) {
char node = s.charAt(i);
if('(' == node) {
stack.push(')');
} else if('{'== node) {
stack.push('}');
} else if('[' == node) {
stack.push(']');
} else if(stack.isEmpty() || stack.pop()!=node) {
return false;
}
}
return stack.isEmpty();
}
}
