678. 有效的括号字符串
难度中等
给定一个只包含三种字符的字符串:(
,)
和 *
,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则:
- 任何左括号
(
必须有相应的右括号)
。 - 任何右括号
)
必须有相应的左括号(
。 - 左括号
(
必须在对应的右括号之前)
。 *
可以被视为单个右括号)
,或单个左括号(
,或一个空字符串。- 一个空字符串也被视为有效字符串。
示例 1:
输入: "()" 输出: True
示例 2:
输入: "(*)" 输出: True
示例 3:
输入: "(*))" 输出: True
class Solution(object): def __init__(self): self.res = False def checkValidString(self, s): """ :type s: str :rtype: bool """ l = r = x = 0 for ch in s: if ch == '(': l += 1 if ch == ')': r += 1 if ch == '*': x += 1 if r > l + x :return False l = r = x = 0 for ch in list(s)[::-1]: if ch == '(':l += 1 if ch == ')':r += 1 if ch == '*':x += 1 if l > r + x :return False return True
class Solution { public: bool checkValidString(string s) { int s_cnt = 0; int l_cnt =0; int r_cnt = 0; for(int i = 0; i < s.size();i++) { if (s[i] == '(') l_cnt++; else if (s[i]==')') r_cnt++; else s_cnt++; if (l_cnt + s_cnt <r_cnt) return false; } s_cnt = r_cnt = l_cnt = 0; for(int i = s.size()-1; i >= 0;i--) { if (s[i] == '(') l_cnt++; else if (s[i]==')') r_cnt++; else s_cnt++; if (r_cnt + s_cnt <l_cnt) return false; } return true;; } };