g0601_0700.s0678_valid_parenthesis_string.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g0601_0700.s0678_valid_parenthesis_string;
// #Medium #String #Dynamic_Programming #Greedy #Stack
// #2022_03_22_Time_0_ms_(100.00%)_Space_41.8_MB_(52.82%)
/**
* 678 - Valid Parenthesis String\.
*
* Medium
*
* Given a string `s` containing only three types of characters: `'('`, `')'` and `'*'`, return `true` _if_ `s` _is **valid**_.
*
* The following rules define a **valid** string:
*
* * 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 `""`.
*
* **Example 1:**
*
* **Input:** s = "()"
*
* **Output:** true
*
* **Example 2:**
*
* **Input:** s = "(\*)"
*
* **Output:** true
*
* **Example 3:**
*
* **Input:** s = "(\*))"
*
* **Output:** true
*
* **Constraints:**
*
* * `1 <= s.length <= 100`
* * `s[i]` is `'('`, `')'` or `'*'`.
**/
public class Solution {
public boolean checkValidString(String s) {
int lo = 0;
int hi = 0;
for (int i = 0; i < s.length(); i++) {
lo += s.charAt(i) == '(' ? 1 : -1;
hi += s.charAt(i) != ')' ? 1 : -1;
if (hi < 0) {
break;
}
lo = Math.max(0, lo);
}
return lo == 0;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy