Skip to content

Commit 9fcf47c

Browse files
authored
Merge pull request neetcode-gh#2458 from t3chkid/main
Adds Kotlin solution for 678. Valid Parenthesis String
2 parents 3024189 + a4a761d commit 9fcf47c

File tree

2 files changed

+58
-1
lines changed

2 files changed

+58
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -383,7 +383,7 @@ If you would like to have collaborator permissions on the repo to merge your own
383383
<sub>[1423 - Maximum Points You Can Obtain From Cards](https://leetcode.com/problems/maximum-points-you-can-obtain-from-cards/)</sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](csharp%2F1423-Maximum-Points-You-Can-Obtain-from-Cards.cs)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](kotlin%2F1423-maximum-points-you-can-obtain-from-cards.kt)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub>
384384
<sub>[1899 - Merge Triplets to Form Target Triplet](https://leetcode.com/problems/merge-triplets-to-form-target-triplet/)</sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](cpp%2F1899-merge-triplets-to-form-target-triplet.cpp)</div></sub> | <sub><div align='center'>[✔️](csharp%2F1899-Merge-Triplets-to-Form-Target-Triplet.cs)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](java%2F1899-merge-triplets-to-form-target-triplet.java)</div></sub> | <sub><div align='center'>[✔️](javascript%2F1899-merge-triplets-to-form-target-triplet.js)</div></sub> | <sub><div align='center'>[✔️](kotlin%2F1899-merge-triplets-to-form-target-triplet.kt)</div></sub> | <sub><div align='center'>[✔️](python%2F1899-merge-triplets-to-form-target-triplet.py)</div></sub> | <sub><div align='center'>[✔️](ruby%2F1899-merge-triplets-to-form-target-triplet.rb)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](swift%2F1899-Merge-Triplets-To-Form-Target-Triplet.swift)</div></sub> | <sub><div align='center'>[✔️](typescript%2F1899-Merge-Triplets-to-Form-Target-Triplet.ts)</div></sub>
385385
<sub>[0763 - Partition Labels](https://leetcode.com/problems/partition-labels/)</sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](cpp%2F0763-partition-labels.cpp)</div></sub> | <sub><div align='center'>[✔️](csharp%2F0763-partition-labels.cs)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](go%2F0763-partition-labels.go)</div></sub> | <sub><div align='center'>[✔️](java%2F0763-partition-labels.java)</div></sub> | <sub><div align='center'>[✔️](javascript%2F0763-partition-labels.js)</div></sub> | <sub><div align='center'>[✔️](kotlin%2F0763-partition-labels.kt)</div></sub> | <sub><div align='center'>[✔️](python%2F0763-partition-labels.py)</div></sub> | <sub><div align='center'>[✔️](ruby%2F0763-partition-labels.rb)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub>
386-
<sub>[0678 - Valid Parenthesis String](https://leetcode.com/problems/valid-parenthesis-string/)</sub> | <sub><div align='center'>[✔️](c%2F0678-valid-parenthesis-string.c)</div></sub> | <sub><div align='center'>[✔️](cpp%2F0678-valid-parenthesis-string.cpp)</div></sub> | <sub><div align='center'>[✔️](csharp%2F0678-valid-parenthesis-string.cs)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](java%2F0678-valid-parenthesis-string.java)</div></sub> | <sub><div align='center'>[✔️](javascript%2F0678-valid-parenthesis-string.js)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](python%2F0678-valid-parenthesis-string.py)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](typescript%2F0678-valid-parenthesis-string.ts)</div></sub>
386+
<sub>[0678 - Valid Parenthesis String](https://leetcode.com/problems/valid-parenthesis-string/)</sub> | <sub><div align='center'>[✔️](c%2F0678-valid-parenthesis-string.c)</div></sub> | <sub><div align='center'>[✔️](cpp%2F0678-valid-parenthesis-string.cpp)</div></sub> | <sub><div align='center'>[✔️](csharp%2F0678-valid-parenthesis-string.cs)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](java%2F0678-valid-parenthesis-string.java)</div></sub> | <sub><div align='center'>[✔️](javascript%2F0678-valid-parenthesis-string.js)</div></sub> | <sub><div align='center'>[✔️](kotlin%2F0678-valid-parenthesis-string.kt)</div></sub> | <sub><div align='center'>[✔️](python%2F0678-valid-parenthesis-string.py)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](typescript%2F0678-valid-parenthesis-string.ts)</div></sub>
387387
<sub>[1921 - Eliminate Maximum Number of Monsters](https://leetcode.com/problems/eliminate-maximum-number-of-monsters/)</sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub>
388388
<sub>[1029 - Two City Scheduling](https://leetcode.com/problems/two-city-scheduling/)</sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](go%2F1029-two-city-scheduling.go)</div></sub> | <sub><div align='center'>[✔️](java%2F1029-two-city-scheduling.java)</div></sub> | <sub><div align='center'>[✔️](javascript%2F1029-two-city-scheduling.js)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](python%2F1029-two-city-scheduling.py)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](rust%2F1029-two-city-scheduling.rs)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](typescript%2F1029-two-city-scheduling.ts)</div></sub>
389389

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
class Solution {
2+
3+
fun checkValidString(s: String): Boolean {
4+
// number of opening parenthesis when '*' is taken as '('
5+
var noOfOpenParenthesisWhenStarIsAnOpeningParenthesis = 0
6+
// number of opening parenthesis when '*' is taken as ')'
7+
var noOfOpenParenthesisWhenStarIsAClosingParenthesis = 0
8+
// number of opening parenthesis when '*' is taken as ' '
9+
var noOfOpenParenthesisWhenStarIsAnEmptyString = 0
10+
11+
for (char in s) {
12+
if (char == '(') {
13+
noOfOpenParenthesisWhenStarIsAnOpeningParenthesis++
14+
noOfOpenParenthesisWhenStarIsAClosingParenthesis++
15+
noOfOpenParenthesisWhenStarIsAnEmptyString++
16+
17+
}
18+
if (char == '*') {
19+
noOfOpenParenthesisWhenStarIsAnOpeningParenthesis++
20+
noOfOpenParenthesisWhenStarIsAClosingParenthesis--
21+
}
22+
23+
if (char == ')') {
24+
noOfOpenParenthesisWhenStarIsAnOpeningParenthesis--
25+
noOfOpenParenthesisWhenStarIsAClosingParenthesis--
26+
noOfOpenParenthesisWhenStarIsAnEmptyString--
27+
}
28+
// A negative value indicates an excess of closing parenthesis.
29+
// Eg: -1 indicates that there are no opening parenthesis and 1 closing parenthesis.
30+
// If at least one of our possibilities is a positive value, then it indicates
31+
// that the string is possibly valid.
32+
// If all of our possibilities have a negative value, it indicates that none of the
33+
// possibilities lead to a valid string. Hence, return false.
34+
if (
35+
noOfOpenParenthesisWhenStarIsAnOpeningParenthesis < 0 &&
36+
noOfOpenParenthesisWhenStarIsAClosingParenthesis < 0 &&
37+
noOfOpenParenthesisWhenStarIsAnEmptyString < 0
38+
) return false
39+
40+
// Ensure that the variables are always positive. A negative value doesn't make sense
41+
// because there cannot be a negative number of opening parenthesis.
42+
noOfOpenParenthesisWhenStarIsAnOpeningParenthesis =
43+
noOfOpenParenthesisWhenStarIsAnOpeningParenthesis.coerceAtLeast(0)
44+
45+
noOfOpenParenthesisWhenStarIsAClosingParenthesis =
46+
noOfOpenParenthesisWhenStarIsAClosingParenthesis.coerceAtLeast(0)
47+
48+
noOfOpenParenthesisWhenStarIsAnEmptyString =
49+
noOfOpenParenthesisWhenStarIsAnEmptyString.coerceAtLeast(0)
50+
51+
}
52+
53+
return noOfOpenParenthesisWhenStarIsAnOpeningParenthesis == 0 ||
54+
noOfOpenParenthesisWhenStarIsAClosingParenthesis == 0 ||
55+
noOfOpenParenthesisWhenStarIsAnEmptyString == 0
56+
}
57+
}

0 commit comments

Comments
 (0)