20. Valid Parentheses

11 篇文章 0 订阅
9 篇文章 1 订阅

Given a string containing just the characters '('')''{''}''[' and ']', determine if the input string is valid.

The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]" and "([)]" are not.

Subscribe to see which companies asked this question.

问题描述:给定一个字符串,该字符串只包含‘(’,')','{','}',']',']',判断该字符串是否有效,即括号匹配问题。

分析:可利用栈的知识来解决这个问题。当字符串长度小于2,则不是有效括号,直接返回false;否则循环字符串s逐个获得字符:

(a)如果字符ch是‘(’,‘[’或‘{’,则将该字符压入栈stack中;

(b)如果字符ch是‘)’,‘]’或‘}’,判断栈中是否为空且栈顶元素是对于的‘(’,‘[’或‘{’。若满足这两个条件则将栈顶元素出栈,继续循环匹配;若不满足其中任意一个则返回false,匹配失败。

循环结束后判断栈stack中是否为空,为空返回true,否则返回false。

注:

pop()函数和peek()函数的区别:pop()函数和peek()函数都是返回栈顶元素的值,但pop()函数会删除栈顶元素,而peek()函数不会移除栈顶元素。

Java栈stack类继承Vector类,除了继承Vector类的所有方法,自己定义的一些方法如下图所示:



public class Solution {
    public boolean isValid(String s) {
        if(s.length()<2)
        	return false;
        char ch;
        Stack stack = new Stack();
        for(int i=0;i<s.length();i++){
        	ch = s.charAt(i);
        	switch(ch){
        	case '(':{
        		stack.push(ch);
        		break;
        	}
        	case ')':{
        		if(!stack.isEmpty() && (char)stack.peek()=='('){
        			stack.pop();
        			break;
        		}else
        			return false;
        	}
        	case '[':{
        		stack.push(ch);
        		break;
        	}
        	case ']':{
        		if(!stack.isEmpty() && (char)stack.peek()=='['){
        			stack.pop();
        			break;
        		}else
        			return false;
        	}
        	case '{':{
        		stack.push(ch);
        		break;
        	}
        	case '}':{
        		if(!stack.isEmpty() && (char)stack.peek()=='{'){
        			stack.pop();
        			break;
        		}else
        			return false;
        	}
        		
        	}
        }
        return stack.isEmpty();
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值