难度:简单 频率:131 题目: 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 解题方法:栈 解题方法: 1.这个问题本质上就跟消消乐一样,按照顺序将符号放入栈里。 2.然后只要判断相邻的两个符号只要是一样的,就一起pop出来,然后继续放。 3.最后栈里只要没有符号,就返回true,否则返回false。
反过来想问题也行,如果消消乐的时候,我只要拿到第二个,栈顶必须是与之对应,否则就永远消不掉了。你拿第二个进去判断的时候,只要之前没有第一个,或者之前是空,那么永远没有。
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for(char c:s.toCharArray()){
if(c=='{') stack.push('}');
if(c=='[') stack.push(']');
if(c=='(') stack.push(')');
if(c=='}'||c==']'||c==')' )
if(stack.isEmpty()||c!=stack.pop())
{
return false;
}
}
return stack.isEmpty();
}
}
需要注意的点: 1.string转化成char的函数,toCharArray() 2.stack.pop(),只要用了就会pop出来,即使是在判断条件里。 3.判空和判断是否等于栈顶 这两个条件不能换顺序,必须先判空,再看是否等于栈顶,翻过来的话,pop完之后是有可能为空的。
|