20. Valid Parentheses(有效的括号)

本文介绍了一个编程问题,如何判断一个仅包含括号的字符串是否有效,即左括号是否都能以正确类型和顺序匹配到右括号。作者提供了使用C++代码通过遍历和消去括号的方式来解决这个问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

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

有效字符串需满足:

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

问题分析

经过简单的分析我们就能明白,一个有效的括号字符串是要所有括号都能消去的,而一个括号要能消去的话,左括号的下一个字符就必须是右括号,所以此问题只需要判断括号是否能够完全消去即可。

代码

bool isValid(char *s){
    int num = 0;
    int flag = 0;
    int j = 0;
    while(s[0]!=0){
        for(int i = 0; s[i+1] != 0; i++){
            switch(s[i]){
                case '(':
                    if(s[i+1] == ')'){
                        for(j = i+2; s[j] != 0; j++){
                            s[j-2] = s[j];
                        }
                        s[j-2] = s[j];
                        flag = 1;
                    }
                    break;
                case '[':
                    if(s[i+1] == ']'){
                        for(j = i+2; s[j] != 0; j++){
                            s[j-2] = s[j];
                        }
                        s[j-2] = s[j];
                        flag = 1;
                    }
                    break;
                case '{':
                    if(s[i+1] == '}'){
                        for(j = i+2; s[j] != 0; j++){
                            s[j-2] = s[j];
                        }
                        s[j-2] = s[j];
                        flag = 1;
                    }
                    break;
            }
            if(flag){
                flag = 0;
                break;
            }
        }
        num++;
        if(num>10001){
            break;
        }
    }
    if(s[0]==0){
        return true;
    }
    return false;
}

提交结果截图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值