Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -383,7 +383,7 @@ If you would like to have collaborator permissions on the repo to merge your own
<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>
<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>
<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>
<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>
<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>
<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>
<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>

Expand Down
57 changes: 57 additions & 0 deletions kotlin/0678-valid-parenthesis-string.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
class Solution {

fun checkValidString(s: String): Boolean {
// number of opening parenthesis when '*' is taken as '('
var noOfOpenParenthesisWhenStarIsAnOpeningParenthesis = 0
// number of opening parenthesis when '*' is taken as ')'
var noOfOpenParenthesisWhenStarIsAClosingParenthesis = 0
// number of opening parenthesis when '*' is taken as ' '
var noOfOpenParenthesisWhenStarIsAnEmptyString = 0

for (char in s) {
if (char == '(') {
noOfOpenParenthesisWhenStarIsAnOpeningParenthesis++
noOfOpenParenthesisWhenStarIsAClosingParenthesis++
noOfOpenParenthesisWhenStarIsAnEmptyString++

}
if (char == '*') {
noOfOpenParenthesisWhenStarIsAnOpeningParenthesis++
noOfOpenParenthesisWhenStarIsAClosingParenthesis--
}

if (char == ')') {
noOfOpenParenthesisWhenStarIsAnOpeningParenthesis--
noOfOpenParenthesisWhenStarIsAClosingParenthesis--
noOfOpenParenthesisWhenStarIsAnEmptyString--
}
// A negative value indicates an excess of closing parenthesis.
// Eg: -1 indicates that there are no opening parenthesis and 1 closing parenthesis.
// If at least one of our possibilities is a positive value, then it indicates
// that the string is possibly valid.
// If all of our possibilities have a negative value, it indicates that none of the
// possibilities lead to a valid string. Hence, return false.
if (
noOfOpenParenthesisWhenStarIsAnOpeningParenthesis < 0 &&
noOfOpenParenthesisWhenStarIsAClosingParenthesis < 0 &&
noOfOpenParenthesisWhenStarIsAnEmptyString < 0
) return false

// Ensure that the variables are always positive. A negative value doesn't make sense
// because there cannot be a negative number of opening parenthesis.
noOfOpenParenthesisWhenStarIsAnOpeningParenthesis =
noOfOpenParenthesisWhenStarIsAnOpeningParenthesis.coerceAtLeast(0)

noOfOpenParenthesisWhenStarIsAClosingParenthesis =
noOfOpenParenthesisWhenStarIsAClosingParenthesis.coerceAtLeast(0)

noOfOpenParenthesisWhenStarIsAnEmptyString =
noOfOpenParenthesisWhenStarIsAnEmptyString.coerceAtLeast(0)

}

return noOfOpenParenthesisWhenStarIsAnOpeningParenthesis == 0 ||
noOfOpenParenthesisWhenStarIsAClosingParenthesis == 0 ||
noOfOpenParenthesisWhenStarIsAnEmptyString == 0
}
}