难度中等
给定一个只包含三种字符的字符串:(
,)
和 *
,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则:
- 任何左括号
(
必须有相应的右括号)
。 - 任何右括号
)
必须有相应的左括号(
。 - 左括号
(
必须在对应的右括号之前)
。 *
可以被视为单个右括号)
,或单个左括号(
,或一个空字符串。- 一个空字符串也被视为有效字符串。
示例 1:
输入: "()" 输出: True
示例 2:
输入: "(*)" 输出: True
示例 3:
输入: "(*))" 输出: 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;; } };