每天一道算法题4

【括号有效配对】
括号有效配对是指:
1) 任何一个左括号都能找到和其正确配对的右括号
2)任何一个右括号都能找到和其正确配对的左括号
有效的:(()) ()() (()()) 等
无效的:(() )( 等
问题一:怎么判断一个括号字符串有效?
问题二:如果一个括号字符串无效,返回至少填几个字符能让其整体有效?

问题一:
用一个变量来记录,如果遇到左括号+1, 如果遇到右括号-1,在遍历过程中,只要出现一次为负数,则必为无效,如果遍历到结束,值为0,则说明字符串有效,否则为无效。

public static boolean valid(String s) {
    char[] str = s.toCharArray();
    int count = 0;
    for (int i = 0; i < str.length; i++) {
        count +=  str[i] == '(' ? 1 : -1;
        if (count < 0) {
            return false;
        }
    }
    return count == 0;
}

问题二:
再添加一个变量,need = 0, 如果遇到右括号时,当前count=0,说明这个右括号就是多的,则need++, 否则说明右括号不是多的,则count--;

public static int needParentheses(String s) {
    char[] str = s.toCharArray();
    int count = 0; 
    int need = 0;
    for (int i = 0; i < str.length; i++) {
        if (str[i] == '(') {
            count++;
        } else {
            if (count == 0) {
                need++;
            } else {
                count--;
            }
        }
    }
    return count + need;
}


©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容