括号序列
题目描述:给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。
**示例1**
输入
"["
返回值
false
**示例2**
输入
"[]"
返回值
true
scala题解
def isValid(s:String): Boolean ={
//定义一个栈
val stack = mutable.Stack[Character]()
//遍历括号序列
for(index<-0 to s.length-1){
//当前位置的字符
val ch = s.charAt(index)
//如果是空栈的话,不需要判断,直接入栈即可
if(stack.isEmpty){
stack.push(ch)
}else{
//取出栈顶元素
val peek = stack.head
//如果栈顶元素和当前位置的括号能成为一个组合,那么将栈顶元素消掉
if((peek=='('&&ch==')'||(peek=='['&&ch==']')||(peek=='{'&&ch=='}'))){
stack.pop
}else if(ch==']'||ch=='}'||ch==')'){
//如果栈顶元素和当前元素不能构成一个组合,而且当前元素是右括号,那么该括号序列不成立
return false
}else{
//该情况是括号嵌套,左括号之前没有右括号,可以直接入栈
stack.push(ch)
}
}
}
//如果该栈元素都被消除掉,当前栈为空,为符合的括号序列
stack.isEmpty
}
随带附个Java代码:
public boolean isValid (String s) {
Stack<Character> stack = new Stack<>();
for(int i=0;i<s.length();i++){
char ch = s.charAt(i);
if(!stack.isEmpty()){
char top = stack.peek();
if((top=='('&&ch==')')||(top=='{'&&ch=='}')||(top=='['&&ch==']'))
stack.pop();
else if(ch==')'||ch==']'||ch=='}')
return false;
else stack.push(ch);
}else{
stack.push(ch);
}
}
return stack.isEmpty();
}