题目:
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
可以根据栈来解决这个问题。
首先简单了解一下什么是栈:
1: 栈是一个先入后出的有序列表;
2:栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom);
3:根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。
简单来说:栈就像是在排队,最里面的最后出,最外面的最先出
测试用例:
s=`(),{},[]`
class Solution {
public boolean isValid(String s) {
if(s.isEmpty()) //判断字符串s是否为空 是返回true
return true;
Stack<Character> stack=new Stack<Character>();//创建一个栈
for(char c:s.toCharArray()){ //是用于遍历字符串s中的每个字符
if(c=='(') //如果为 ( 向栈里面存入 )
stack.push(')');
else if(c=='{')
stack.push('}');
else if(c=='[')
stack.push(']');
else if(stack.empty()||c!=stack.pop()) //如果c是) ] } 则 判断栈是否为空或 当前c和
//栈顶元素比较 如果不相同返回 false
return false;
}
if(stack.empty()) //如果栈为空 返回true
return true;
return false;
}
}