678. 有效的括号字符串
Posted 7TribeZ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了678. 有效的括号字符串相关的知识,希望对你有一定的参考价值。
难度中等383
给定一个只包含三种字符的字符串:(
,)
和 *
,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则:
- 任何左括号
(
必须有相应的右括号)
。 - 任何右括号
)
必须有相应的左括号(
。 - 左括号
(
必须在对应的右括号之前)
。 *
可以被视为单个右括号)
,或单个左括号(
,或一个空字符串。- 一个空字符串也被视为有效字符串。
示例 1:
输入: "()" 输出: True
示例 2:
输入: "(*)" 输出: True
示例 3:
输入: "(*))" 输出: True
注意:
- 字符串大小将在 [1,100] 范围内。
代码
// 正反遍历。正向遍历:'('匹配足够多的')'或者'*',反向同理。
class Solution {
public:
bool checkValidString(string s) {
if (s.empty()) return true;
int n=s.size();
int rEqual=0;
int lEqual=0;
for(int i=0;i<n;i++)
{
if(s[i]=='('){
rEqual++;
}
else if((rEqual>0 && s[i]==')')||(rEqual>0 && s[i]=='*')){
rEqual--;
}
}
if(rEqual>0) return false;
for (int i=n-1;i>=0;i--){
if (s[i]==')'){
lEqual++;
}
else if((lEqual>0 && s[i]=='(')||(lEqual>0 && s[i]=='*')){
lEqual--;
}
}
if(lEqual>0) return false;
return true;
}
};
以上是关于678. 有效的括号字符串的主要内容,如果未能解决你的问题,请参考以下文章