力扣刷题——20. 有效的括号

20. 有效的括号

每次左符号进栈,遇到右符号,出栈,右符号与出栈的符号匹配即可。

注意有些细节,比如最后栈中左括号要全部出栈,也不能先出现右括号

package leetcode;

import java.util.LinkedList;

public class Solution {
    public boolean isValid(String s) {

        char[] left = {'(', '[', '{'};
        char[] right = {')', ']', '}'};
        
        LinkedList<Integer> stack = new LinkedList<>();

        for (int i = 0; i < s.length(); ++i) {
        	//左符号进栈
			if (s.charAt(i) == left[0]) {
            	stack.push(0);//入栈
            } else if (s.charAt(i) == left[1]) {
            	stack.push(1);//入栈
            } else if (s.charAt(i) == left[2]) {
            	stack.push(2);//入栈
            } else if (!stack.isEmpty()) {
            	//如果符号不匹配
				if (s.charAt(i) != right[stack.pop()]) {
					return false;
				}
			} else {//这种情况是先有了右括号
				return false;
			}
        }

        //最后栈为空才代表匹配完所有符号
        return stack.isEmpty() ? true : false;
    }
}

posted on 2023-02-25 10:51  pumpkinsBig  阅读(18)  评论(0)    收藏  举报

导航