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