Valid Parenthesis String
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:
- Any left parenthesis
'('
must have a corresponding right parenthesis')'
. - Any right parenthesis
')'
must have a corresponding left parenthesis'('
. - Left parenthesis
'('
must go before the corresponding right parenthesis')'
. '*'
could be treated as a single right parenthesis')'
or a single left parenthesis'('
or an empty string.- An empty string is also valid.
Example 1:
Input: "()" Output: True
Example 2:
Input: "(*)" Output: True
Example 3:
Input: "(*))" Output: True
Note:
- The string size will be in the range [1, 100].
class Solution {
public:
bool checkValidString(string s)
{
stack<int> open,star;
int i=0;
if(s.size()==1&&s[0]==')')
return false;
while(i<s.size())
{
if(s[i]=='(')
{
open.push(i);
}
else if(s[i]==')')
{
if(!open.empty())
open.pop();
else if(!star.empty())
star.pop();
else
return false;
}
else if(s[i]=='*')
{
star.push(i);
}
++i;
}
while(open.size()>0)
{
if(star.empty())return false;
if(open.top()<star.top())
{
open.pop(),star.pop();
}else{
return false;
}
}
return true;
}
};
public:
bool checkValidString(string s)
{
stack<int> open,star;
int i=0;
if(s.size()==1&&s[0]==')')
return false;
while(i<s.size())
{
if(s[i]=='(')
{
open.push(i);
}
else if(s[i]==')')
{
if(!open.empty())
open.pop();
else if(!star.empty())
star.pop();
else
return false;
}
else if(s[i]=='*')
{
star.push(i);
}
++i;
}
while(open.size()>0)
{
if(star.empty())return false;
if(open.top()<star.top())
{
open.pop(),star.pop();
}else{
return false;
}
}
return true;
}
};