class Solution {
public boolean isValid(String s) {
Stack<Character>stack = new Stack<Character>();
for(char c: s.toCharArray()){
if(c=='(')stack.push(')');
else if(c=='[')stack.push(']');
else if(c=='{')stack.push('}');
else if(stack.isEmpty()||c!=stack.pop())return false;
}
return stack.isEmpty();
}
}
思路:
- s.toCharArray()变成单个字符,例如“www.baidu.com”—>w w w . …
- 关键点,stack.pop()弹出栈顶元素并删除,stack.peak()弹出栈顶元素不删除。
- 举例分析,"([])"—>‘(’、‘[’、‘]’、‘)’,c=’(’,’)‘压栈,c=’[’,’]‘压栈,c=’]’,此时显然栈不为空,但是等于栈顶元素,并通过stack.pop()将栈顶元素删除,)c=‘)’同理。最终栈为空,返回true;
“([)]”—>‘(’、‘[’、‘)’、‘]’,c=’(’,’)‘压栈,c=’[’,’]‘压栈,c=’)’,栈不为空也不等于栈顶元素‘]’,返回false;
""空字符串,直接栈为空,返回false。