有效的括号
力扣简单习题:
大致思路
{},[],()的ASIC码字相差1或者2,利用这个差值即可实现代码
代码实现
package com.immunize.leetcode.valid_bracket;
import java.util.Stack;
/**
* {} [] ASIC码相差2,()相差1,根据这个来判断即可 主要思路:引入一个新的栈,用于储存可能为左边括号的字符。
*
* @author Mr IMMUNIZE
*/
class ValidBracket {
public boolean isValid(String s) {
// 如果输入字符串为空,则返回true
if (s == "" || s.length() == 0)
return true;
// 先将字符串首字符入栈
Stack stack = new Stack();
stack.push(s.charAt(0));
// 遍历
for (int i = 1; i < s.length(); i++) {
if (!stack.isEmpty()) {
// 若已有对比的栈内元素,则判断ASII码即可,若配对成功,则出栈,若不匹配,继续遍历
if (stack.peek().equals((char) (s.charAt(i) - 1)) || stack.peek().equals((char) (s.charAt(i) - 2))) {
stack.pop();
} else {
stack.push(s.charAt(i));
}
} else {
stack.push(s.charAt(i));// 继续入栈即可
}
}
if (stack.isEmpty())
return true;
return false;
}
}
----------------------------------------------------------------
package com.immunize.leetcode.valid_bracket;
/**
* 测试
*
* @author Mr IMMUNIZE
*
*/
public class ValidBracketTest {
public static void main(String[] args) {
ValidBracket vb = new ValidBracket();
System.out.println(vb.isValid("(]"));
ValidBracket1 vb1 = new ValidBracket1();
System.out.println(vb1.isValid("{[()]}"));
}
}