Leetcode: 有效的括号字符串(Valid Parenthesis String)(C++)

Given a string containing only three types of characters: '(', ')' and '*', write a function to check whether this string is valid. We define the validity of a string by these rules:

  1. Any left parenthesis '(' must have a corresponding right parenthesis ')'.
  2. Any right parenthesis ')' must have a corresponding left parenthesis '('.
  3. Left parenthesis '(' must go before the corresponding right parenthesis ')'.
  4. '*' could be treated as a single right parenthesis ')' or a single left parenthesis '(' or an empty string.
  5. An empty string is also valid.

Example 1:

Input: "()"
Output: True

Example 2:

Input: "(*)"
Output: True

Example 3:

Input: "(*))"
Output: True

Note:

  1. The string size will be in the range [1, 100].

给定一个仅包含三种类型的字符的字符串:'(',')'和'*',编写一个函数来检查此字符串是否有效。 我们通过以下规则定义字符串的有效性:

  1. 任何左括号'('必须有相应的右括号')'。
  2. 任何右括号')'必须具有相应的左括号'('。
  3. 左括号'('必须在相应的右括号之前'')'。
  4. '*'可以被视为单个右括号')'或单个左括号'('或一个空字符串。
  5. 空字符串也是有效的。

注意:

  1. 字符串长度的范围是 [1, 100].

这题我也不明白他想做什么。我这边使用了min和max分别表示右括号最小和最大出现的次数。只要一次循环,最后比较min是否为0就行了,min大于0就是右括号还需要再写min次,才能使字符串有效

class Solution {
public:
    bool checkValidString(string s) {
        int min = 0, max = 0;
        for(int i = 0; i < s.length(); i++){
            if(s[i] == '('){
                min++;
                max++;
            }
            else if(s[i] == ')'){
                min--;
                max--;
            }
            else if(s[i] == '*'){
                min--;
                max++;
            }
            if(min < 0){
                min = 0;
            }
            if(max < 0){
                return false;
            }
        }
        if(min == 0)
            return true;
        else
            return false;
    }
};


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值