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