0
点赞
收藏
分享

微信扫一扫

第4章 kafka broker

芒果六斤半 2024-11-06 阅读 22
数据结构

有效的括号

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

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

示例 1:

示例 2:

示例 3:

示例 4:

提示:

  • 1 <= s.length <= 104
  • s 仅由括号 '()[]{}' 组成

题解

​ 这是一道很经典的栈的问题,之前做过很多次,用过很多方法,笨拙的匹配也好,用 map 映射也好,总之我一直觉得是一道非常简单的问题;

​ 但是当我第一次看见工程师外教的代码,我才意识到,即使同为程序员,写的代码之间的差距也是非常大的,他写的代码非常的优雅简洁

class Solution {
    String OPENINGS = "({[";
    String CLOSINGS = ")}]";
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<Character>();
        for(int i = 0; i < s.length(); i++){
            if(isOPENINGS(s.charAt(i))){
                stack.push(s.charAt(i));
            }else if(isCLOSINGS(s.charAt(i))){
                if(stack.empty() || !match(stack.pop(), s.charAt(i))){
                    return false;
                }
            }
        }
        return stack.empty();
    }

    boolean isOPENINGS(Character o){
        return OPENINGS.indexOf(o) > -1;
    }

    boolean isCLOSINGS(Character o){
        return CLOSINGS.indexOf(o) > -1;
    }

    boolean match(Character a, Character b){
        return OPENINGS.indexOf(a) == CLOSINGS.indexOf(b);
    }
}
var OPENINGS string = "({["
var CLOSINGS string = ")}]"

func isValid(s string) bool {
	stack := []byte{}
	for i := 0; i < len(s); i++ {
		if isOPENING(s[i]) {
			stack = append(stack, s[i])
		} else if isCLOSINGS(s[i]) {
			if len(stack) == 0 || !match(stack[len(stack)-1], s[i]) {
				return false
			}
			stack = stack[:len(stack)-1]
		}
	}
	return len(stack) == 0
}

func isOPENING(o byte) bool {
	return strings.IndexByte(OPENINGS, o) > -1
}

func isCLOSINGS(o byte) bool {
	return strings.IndexByte(CLOSINGS, o) > -1
}

func match(a, b byte) bool {
	return strings.IndexByte(OPENINGS, a) == strings.IndexByte(CLOSINGS, b)
}
举报

相关推荐

0 条评论