判断括号是否成对

就是在一个只有括号的字符串里的括号是否合法。 所谓合法就是成对,比如 "{}[](){([])}" 但是这样就是不对的 “[((((])” 以及包含的顺序不对 “([)]” 都判为非法。

bool isValid(string s) {
    unordered_map<char, int> parenthesesDic{
        {'{', 1}, {'[', 2}, {'(', 3}, {')', -3}, {']', -2}, {'}', -1}};

    stack<int> parentheses;
    
    for(auto c : s){
        auto val = parenthesesDic[c];
        
        if (val > 0){
            parentheses.push(val);
        }
        else if (parentheses.empty() || ((val + parentheses.top()) != 0)){
            return false;
        }
        else {
            parentheses.pop();
        }
    }
    return parentheses.empty()? true : false;
}

 

转载于:https://www.cnblogs.com/wuOverflow/p/4755945.html

### 回答1: 可以使用栈来实现判断括号是否成对。遍历字符串,当遇到左括号时入栈,当遇到右括号时出栈,如果栈为空或者栈顶元素不是对应的左括号,则说明括号成对,返回false,否则继续遍历。最后如果栈为空,则说明括号全部成对,返回true,否则返回false。 示例代码如下: ```javascript function isParenthesesMatched(str) { const stack = []; for (let i = 0; i < str.length; i++) { if (str[i] === '(' || str[i] === '[' || str[i] === '{') { stack.push(str[i]); } else if (str[i] === ')' && stack[stack.length - 1] === '(') { stack.pop(); } else if (str[i] === ']' && stack[stack.length - 1] === '[') { stack.pop(); } else if (str[i] === '}' && stack[stack.length - 1] === '{') { stack.pop(); } else { return false; } } return stack.length === 0; } ``` 使用示例: ```javascript console.log(isParenthesesMatched('()')); // true console.log(isParenthesesMatched('()[]{}')); // true console.log(isParenthesesMatched('(]')); // false console.log(isParenthesesMatched('([)]')); // false console.log(isParenthesesMatched('{[]}')); // true ``` ### 回答2: 在ES6中,我们可以使用一种简单的方法来判断括号是否成对。这个方法是通过使用数组和循环来实现的。 首先,我们需要定义一个函数,它将接收一个字符串作为参数,这个字符串将包含各种字符,包括括号。接着,我们将创建一个空数组,用于存储遇到的所有括号。 接下来,我们使用一个for循环来遍历字符串中的每个字符。如果我们遇到了一个开括号(‘(’,‘[’,‘{’),我们就将它添加到数组中。如果我们遇到的是一个闭括号(‘)’,‘]’,‘}’),我们将检查数组中的最后一个元素是否与当前的闭括号相匹配。如果是匹配的,则我们将数组中的最后一个元素弹出。如果不匹配,或者数组为空,则说明括号没有成对出现,返回false。 最后,在循环结束后,我们将检查数组中是否还有剩余的括号。如果有,则说明括号没有成对出现,返回false。如果数组为空,则说明所有的括号成对出现,返回true。 以下是一个示例函数的代码实现: ```javascript function checkParentheses(str) { let arr = []; for(let i = 0; i < str.length; i++) { if(str[i] === '(' || str[i] === '[' || str[i] === '{') { arr.push(str[i]); } else if(str[i] === ')' || str[i] === ']' || str[i] === '}') { if(arr.length === 0) { return false; } if((str[i] === ')' && arr[arr.length-1] === '(') || (str[i] === ']' && arr[arr.length-1] === '[') || (str[i] === '}' && arr[arr.length-1] === '{')) { arr.pop(); } else { return false; } } } return arr.length === 0; } ``` 使用这个函数,我们可以轻松地判断一个字符串中的括号是否成对出现。返回true表示括号成对,返回false表示括号没有成对出现。 ### 回答3: ES6提供了一个很简洁的方法来判断括号是否成对,即使用箭头函数以及Array的一些方法。我们可以通过以下步骤来实现该功能: 首先,我们将输入的字符串转成数组,并使用Array的filter方法来过滤掉除了括号之外的所有字符。这样我们就只剩下了括号。 接下来,利用reduce方法对数组进行遍历,同时使用一个计数器来判断括号是否成对。当遇到左括号时,计数器加1;当遇到右括号时,计数器减1。最后,如果计数器的值为0,则表示所有括号成对,否则就表示有括号没有成对。 最后,我们将判断结果返回即可。 以下是一个用于判断括号成对的ES6箭头函数的实现代码: const isMatchingBrackets = (str) => { const brackets = str.split("").filter(char => ['(', ')', '[', ']', '{', '}'].includes(char)); let count = 0; return !brackets.reduce((acc, char) => { if (char === '(' || char === '[' || char === '{') { count++; } else { count--; } return count < 0 ? acc + 1 : acc; }, 0); }; 该函数会返回一个布尔值,true表示所有括号成对,false表示有括号没有成对
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值