给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号。
解题思路:
这个思考的过程就是栈的实现过程。因此我们考虑使用栈,当遇到的是左括号时,将其进栈,当遇到的是右括号,判断该右括号是否与栈顶的左括号匹配,如果匹配则消掉,如果不匹配则该字符串无效。
java实现代码:
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for (int i=0;i<s.length();i++){
char c = s.charAt(i);
switch(c){
case '{':stack.push(c);break;
case '(':stack.push(c);break;
case '[':stack.push(c);break;
case '}':
if(stack.empty()||stack.peek()!='{')
return false;
stack.pop();
break;
case ')':
if(stack.empty()||stack.peek()!='(')
return false;
stack.pop();
break;
case ']':
if(stack.empty()||stack.peek()!='[')
return false;
stack.pop();
break;
}
}
if(!stack.empty())
return false;
else
return true;
}
}
涉及到的知识点:
栈是一种只能在一端进行插入或删除操作的线性表。(先进后出表)
实例化:
Stack stack = new Stack();
判断是否为空:
stack.empty(); stack.isEmpty();
取栈顶值(不出栈):
stack.peek();
进栈:
stack.push(Object);
出栈:
stack.pop();