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(); } }