您的位置:首页 > 其它

678. Valid Parenthesis String

2017-09-21 09:54 155 查看
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


class Solution {
public boolean checkValidString(String s) {
Stack<Integer> st1 = new Stack<>();
Stack<Integer> st2 = new Stack<>();
for (int i = 0; i < s.length(); ++i) {
char c = s.charAt(i);
if (c == '(')
st1.add(i);
else if (c == '*')
st2.add(i);
else {
if (!st1.isEmpty())
st1.pop();
else if (!st2.isEmpty())
st2.pop();
else
return false;
}
}
while (!st1.isEmpty()) {
int n1 = st1.pop();
if (st2.isEmpty())
return false;
int n2 = st2.pop();
if (n1 > n2)
return false;
}
return true;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: