给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([])"
输出:true
提示:
1 <= s.length <= 104
s
仅由括号'()[]{}'
组成
这个题是非常基础的栈的使用,其他的就不多说了,上代码,看不懂的请留言或者私信,收到第一时间解答
class Solution {
/**非常简单的题,整体思想就是用个栈,如果是左括号就入栈,如果是右括号就弹出
如果弹出的不是自己对应的左括号,直接失败
如果最后栈为空就是成功,如果不是空就是失败了 */
public boolean isValid(String s) {
/**不是2的整数倍,不可能是有效的 */
if(s.length() % 2 == 1) {
return false;
}
/**转成字符数组*/
char[] sArr = s.toCharArray();
/**定义栈*/
Stack<Character> stack = new Stack<>();
for(char c : sArr) {
if(c == '(' || c == '[' ||c == '{') {
/**如果是左括号放入对应的右括号,这样右括号的时候直接判断是否相等就行了 */
stack.push(c == '('?')':c == '['?']' : '}');
} else {
/**栈为空肯定找不到对应的,如果弹出来的不对应也匹配不上 */
if(stack.isEmpty() || stack.pop() != c) {
return false;
}
}
}
/**配对即弹出,如果最后弹空了,说明都对上了 */
return stack.isEmpty();
}
}