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
Any right parenthesis
Left parenthesis
a single left parenthesis
An empty string is also valid.
Example 1:
Example 2:
Example 3:
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;
}
}
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;
}
}
相关文章推荐
- 678. Valid Parenthesis String
- [LeetCode] 678. Valid Parenthesis String 验证括号字符串
- leetcode 678. Valid Parenthesis String 有效括号的判断 + 保存index遍历
- 678. Valid Parenthesis String
- LWC 50:678. Valid Parenthesis String
- LeetCode678. Valid Parenthesis String
- 678. Valid Parenthesis String
- [Leetcode] 678. Valid Parenthesis String 解题报告
- [LeetCode]Valid Parenthesis String
- String-678-Valid Parenthesis String
- LeetCode Valid Parenthesis String
- LeetCode-Valid Parenthesis String
- leetcode 678 Valid Parenthesis String
- [LeetCode] Valid Parenthesis String 验证括号字符串
- MYSQL数据迁移tips,ORA-00907: missing right parenthesis
- C++ Stack Application - (Parenthesis Matching) 堆栈应用之"括号匹配"
- Q9.11 count the number of ways of parenthesizing the expression
- HDU5831 Rikka with Parenthesis II
- HDU 5831 Rikka with Parenthesis II
- CSU 1809 Parenthesis