678. 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.
- Any left parenthesis
Example 1:
Input: "()" Output: True
Example 2:
Input: "(*)" Output: True
Example 3:
Input: "(*))" Output: True
题目大意:给定一个string字符,包含‘(’,‘)’,‘’三种字符,其中‘’可以表示空字符,‘(’或者‘)’,问是否满足string字符中左右括号相等。
思路:具体见解释https://discuss.leetcode.com/topic/103936/short-java-o-n-time-o-1-space-one-pass/2
代码
package String; import java.util.Stack; /** * @Author OovEver * @Date 2017/12/8 18:57 */ public class LeetCode678 { public boolean checkValidString(String s) { int low = 0; int high = 0; for(int i=0;i<s.length();i++) { if (s.charAt(i) == '(') { low++; high++; } else if (s.charAt(i) == ')') { if (low > 0) { low--; } high--; } else { if (low > 0) { low--; } high++; } if (high < 0) { return false; } } return low == 0; } }