Leetcode20.有效的括号

题目:

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。

左括号必须以正确的顺序闭合。

每个右括号都有一个对应的相同类型的左括号。

示例 1:

输入:s = "()"

输出:true

示例 2:

输入:s = "()[]{}"

输出:true

示例 3:

输入:s = "(]"

输出:false

示例 4:

输入:s = "([])"

输出:true

代码:

import java.util.Stack;

class Solution {

    public boolean isValid(String s) {

        if (s.length() == 0) {

    return true;

}

//如果输入的字符串是空的(没有任何括号),直接返回 true (空字符串说明括号匹配完了)。

Stack<Character> stack = new Stack<>();

//-  Stack :
这是 Java 中一个 内置的栈类,位于  java.util  包中。使用前需要通过  import java.util.Stack;  导入。
-  <Character> :
这是 泛型语法,用于指定栈中存储的元素类型。这里指定为  Character (字符类型),表示这个栈只能存储  char  类型的数据(如  'a' 、 'B' )。

创建一个栈,用来存储遍历过程中遇到的左括号( ( 、 { 、 [ )。

for (char ch : s.toCharArray()) {
    // 增强形for循环

s.toCharArray()  的作用

toCharArray()  是 String  类的一个方法,它的功能是把 字符串转换为字符数组。

增强型 for 循环的语法是  for (数据类型 变量 : 数组或集合) ,它会自动遍历数组或集合中的每一个元素。

- char ch :声明一个 char  类型的变量 ch ,用于临时存储遍历到的每个字符。

- s.toCharArray() :作为被遍历的对象(即字符数组)。

if (ch == '(' || ch == '{' || ch == '[') {
    stack.push(ch);

//-  push :
它是栈的一个 方法,作用是将元素 “压入栈顶”。只要栈的设计允许(比如没达到容量限制),就可以不断用  push  往栈里添加元素。

代码执行效果
假设已有一个空栈  stack ,执行  stack.push(ch);  时:
- 如果  ch  是  'a' ,那么字符  'a'  会被放入栈的顶部。
- 如果后续再次执行  stack.push('b'); ,字符  'b'  会压在  'a'  上方,此时栈顶元素是  'b' 。

}else {

如果 ch 不是左括号,说明是右括号。
    if (stack.isEmpty()) {
        return false;

//- 在执行pop()操作前检查,避免空栈异常
    } else {
        char temp = stack.pop();

//temp存储的是左括号

//-  pop() :
这是栈的一个方法,作用是 “弹出栈顶元素”。

后进先出
        if (ch == ')') {
            if (temp != '(') {
                return false;
            }
        } else if (ch == '}') {
            if (temp != '{') {
                return false;
            }
        } else if (ch == ']') {
            if (temp != '[') {
                return false;
            }
        }
    }
}
return stack.isEmpty() ? true : false;

//遍历结束后,检查栈是否为空:
- 栈空:说明所有左括号都匹配了,返回  true ;
- 栈非空:说明有未匹配的左括号,返回  false 。

}

    }

}

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值