题目详情
Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.
The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]" and "([)]" are not.输入一个字符串s,这个字符串是由字符'(', ')', '{', '}', '[' 和 ']'组成的。我们需要判定这个字符串的格式是否有效。判定是否有效的一句就是,字符必须严格有序。例如"()" 和 "()[]{}"是有效的,但是"()"和"()[]{}"就是无效的。
想法
- 这道题目比较适合用栈作为存储中间结果的数据结构,因为字符应当是后进先出,方便我们进行判断。
- 对于前一半字符(eg.‘(’,'[','{'),我们对它们进行入栈操作。
- 如果遇到了后半字符,我们需要对栈顶元素取出,并判断栈顶字符和当前字符是否匹配。如果不匹配,即整个字符串无效。
- 当整个字符串的遍历结束的时候,判断栈是否为空(完全匹配)。
解法
Stack<Character> save = new Stack<Character>();
if(s.length() == 0)return true;
for(char c : s.toCharArray()){
if(c == '('){
save.push(')');
}else if (c == '['){
save.push(']');
}else if (c == '{'){
save.push('}');
}else if (save.isEmpty() || c != save.pop()){
return false;
}
}
return save.isEmpty();
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。