LeetCode(20有效的括号)

如题在这里插入图片描述
很显然的运用抵消的思想来做

public boolean isValid(String s) {
		char [] cs=new char[s.length()];//顺序缓存未匹配字符
		int i=0;//可填入的index
		for(int m=0;m<s.length();m++) {
			if(s.charAt(m)=='('||s.charAt(m)=='{'||s.charAt(m)=='[') {
				cs[i]=s.charAt(m);//左半括号直接写入 并将可写index+1;
				i++;
			}else if(s.charAt(m)==')') {//出现右半括号判断前一位是否为对应的左括号
				if(i>0&&cs[i-1]=='(') {//是则可写index-1抵消掉左括号
					i--;	//后同
				}else {
					return false;
				}
			}else if(s.charAt(m)=='}') {
				if(i>0&&cs[i-1]=='{') {
					i--;
				}else {
					return false;
				}
			}else if(s.charAt(m)==']') {
				if(i>0&&cs[i-1]=='[') {
					i--;
				}else {
					return false;
				}
			}
		}
		return i==0;//完全抵消则很显然缓存应当为空
    }

基本就是顺序缓存左括号,碰到右括号则判断是否与最后一位缓存对应,对应则抵消
在这里插入图片描述
其实就是栈的思路,空间上可以优化,很显然成立的字符串,左括号不会超过一半,用半长缓存数组就行,到所需缓存空间不足直接返回即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值