题目描述
难度 简单
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
提示:
1 <= s.length <= 104
s 仅由括号 '()[]{}' 组成
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
不断的替换符号"()" "[]" "{}"为空串,在一定的次数后,如果字符串为空则表示是有效的,反之则表示字符串无效的。
代码实现
执行结果:通过
执行用时:34 ms, 在所有 Java 提交中击败了5.19% 的用户
内存消耗:38.8 MB, 在所有 Java 提交中击败了5.03% 的用户
通过测试用例:91 / 91
2021年 11月 11日 星期四 14:23:51 CST
记录与总结,2021年 11月 11日 星期四 14:31:18 CST。
站内巧妙的解法
/**
* https://leetcode-cn.com/u/nakangzi/
* 真巧妙
* 执行结果:通过
* 执行用时:1 ms, 在所有 Java 提交中击败了98.90% 的用户
* 内存消耗:36.7 MB, 在所有 Java 提交中击败了18.55% 的用户
* 通过测试用例:91 / 91
* 2021年 11月 11日 星期四 13:10:34 CST
*
* @return
*/
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();
}