判断括号是否合法

给定一个只包括 '('')''{''}''['']' 的字符串,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

譬如:"()[]{}"为合法,"(]"、"([)]"均为非法。

思路:栈,遇到左括号入栈,非左括号出栈并检查是否匹配,如果不匹配则非法。如果整个字符串遍历完了且栈也为空,则合法。

代码:

public class ValidParentheses {
	//定义栈
	class Stack{
		char[] ch;
		int maxSize;
		int head = -1;
		public Stack(int maxSize) {
			this.maxSize = maxSize;
			ch = new char[maxSize];
		}
		public void push(char c) {
			if(isFull()) {
				ch = Arrays.copyOf(ch, 2*maxSize);
			}
			ch[++head] = c;
		}
		public char pop() {
			if(isEmpty())
				return ' ';
			return ch[head--]; 
		}
		public boolean isEmpty() {
			return head-1 < -1;
		}
		public boolean isFull() {
			return head == maxSize-1;
		}
	}
	public boolean isValid(String s) {
		if(s.isEmpty())return true; //空串为真
		Stack stack = new Stack(s.length());
		for(int i = 0;i<s.length();i++) {
			char t = s.charAt(i);
			if(t == '('||t=='['||t=='{') { //左括号入栈
				stack.push(t);
			}else {
				char t1 = stack.pop();
				if(t1 == '('&&t == ')')continue;
				else if (t1 == '['&&t == ']') continue;
				else if (t1 == '{'&&t=='}') continue;
				else {
					return false;
				}
			}
		}
		if(stack.isEmpty())
			return true;
		else 
			return false;
	}
	public static void main(String[] args) {
		System.out.println(new ValidParentheses().isValid("()[]{}"));
		System.out.println(new ValidParentheses().isValid("(]"));
		System.out.println(new ValidParentheses().isValid("([)]"));
		System.out.println(new ValidParentheses().isValid("})]"));
	}
}

运行结果:

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值