Problem Statement
Well-parenthesized strings are defined using the following rules:
- The empty string is well-parenthesized.
- If S is a well-parenthesized string, then (S) is a well-parenthesized string.
- If S and T are well-parenthesized strings, then ST is a well-parenthesized string.
- Every well-parenthesized string can be created using the previous rules only.
In this problem we will deal with the complement of this set of strings: The strings that consist only of the characters '(' and ')', but are not well-parenthesized. We will call these strings mismatched.
You are given an
Definition
- Class:
- MismatchedStrings
- Method:
- getString
- Parameters:
- int, long
- Returns:
- String
- Method signature:
- String getString(int N, long K)
- (be sure your method is public)
Notes
- Given two different strings S and T of equal length, S is lexicographically smaller than T if it has a smaller character at the first position where they differ.
- The ASCII value of '(' is less than the ASCII value of ')'.
Constraints
- N will be between 1 and 50, inclusive.
- K will be between 0 and 2^N - 1, inclusive.
Examples
4
0
Returns: "(((("
For any length, the lexicographically smallest mismatched string consists of '(' characters only.
4
4
Returns: "())("
There are 14 mismatched strings of length 4. The first five are "((((", "((()", "(()(", "()((", and "())(". Note that we use a 0-based index, hence K=4 corresponds to the fifth mismatched string.
6
63
Returns: ""
There are less than 64 mismatched strings of length 6.
7
13
Returns: "((())()"
49
562949953421311
Returns: ")))))))))))))))))))))))))))))))))))))))))))))))))"
1
0
Returns: "("
1
1
Returns: ")"
47
987654321987
Returns: "((((((()))(()()))))()(())(()((())))()))()(((())"
50
12345678
Returns: "(((((((((((((((((((((((((()())))((())(((()()(()))("
50
1121037960441172
Returns: ""
50
1121037960441171
Returns: "))))))))))))))))))))))))))))))))))))))))))))))))))"
50
1121036960441172
Returns: "))))))))))))))))))))((()((())(()()(())())((((((((("
38
52133126321
Returns: "(())((())()())))()(())()(()))))(()(())"
2
0
Returns: "(("
2
1
Returns: ")("
2
2
Returns: "))"
2
3
Returns: ""
3
0
Returns: "((("
3
7
Returns: ")))"
3
5
Returns: ")()"
4
13
Returns: "))))"
4
12
Returns: ")))("
6
16
Returns: "()()(("
7
42
Returns: "()()()("
8
81
Returns: "()()))))"
12
3532
Returns: ")))(()()(((("
34
2343251535
Returns: "(()((()))))())())()))(())())))(((("
49
562949953421311
Returns: ")))))))))))))))))))))))))))))))))))))))))))))))))"
50
1121037960441171
Returns: "))))))))))))))))))))))))))))))))))))))))))))))))))"
3
7
Returns: ")))"
3
6
Returns: "))("
4
13
Returns: "))))"
4
14
Returns: ""
4
2
Returns: "(()("
5
31
Returns: ")))))"
5
5
Returns: "(()()"
6
58
Returns: "))))))"
6
59
Returns: ""
6
38
Returns: ")()())"
7
127
Returns: ")))))))"
7
99
Returns: "))((())"
8
241
Returns: "))))))))"
8
242
Returns: ""
8
125
Returns: ")((()())"
9
511
Returns: ")))))))))"
9
261
Returns: ")((((()()"
10
981
Returns: "))))))))))"
10
982
Returns: ""
10
935
Returns: "))))()((()"
11
2047
Returns: ")))))))))))"
11
1322
Returns: ")()(()()()("
12
3963
Returns: "))))))))))))"
12
3964
Returns: ""
12
1135
Returns: "()(()))(()()"
13
8191
Returns: ")))))))))))))"
13
6752
Returns: "))()(())((((("
14
15954
Returns: "))))))))))))))"
14
15955
Returns: ""
14
1273
Returns: "((()()())(((()"
15
32767
Returns: ")))))))))))))))"
15
14426
Returns: "()))(((()())()("
16
64105
Returns: "))))))))))))))))"
16
64106
Returns: ""
16
57797
Returns: ")))(()))()())())"
17
131071
Returns: ")))))))))))))))))"
17
94158
Returns: ")())())))))(()))("
18
257281
Returns: "))))))))))))))))))"
18
257282
Returns: ""
18
73694
Returns: "()(())(((()())(())"
19
524287
Returns: ")))))))))))))))))))"
19
358750
Returns: ")()())))(()()())))("
20
1031779
Returns: "))))))))))))))))))))"
20
1031780
Returns: ""
20
208694
Returns: "(())()()))()))()()(("
21
2097151
Returns: ")))))))))))))))))))))"
21
532385
Returns: "()(((((())))))()(((()"
22
4135517
Returns: "))))))))))))))))))))))"
22
4135518
Returns: ""
22
77596
Returns: "((((()(()))())((()()))"
23
8388607
Returns: ")))))))))))))))))))))))"
23
3289644
Returns: "())(()((())(()((()())(("
24
16569203
Returns: "))))))))))))))))))))))))"
24
16569204
Returns: ""
24
15874689
Returns: "))))()()())(()))(((())()"
25
33554431
Returns: ")))))))))))))))))))))))))"
25
18578504
Returns: ")((())())()))))((()(()((("
26
66365963
Returns: "))))))))))))))))))))))))))"
26
66365964
Returns: ""
26
58066138
Returns: ")))(((((()()())()())(()))("
27
134217727
Returns: ")))))))))))))))))))))))))))"
27
28638036
Returns: "(())())()(()))))())()()()(("
28
265761015
Returns: "))))))))))))))))))))))))))))"
28
265761016
Returns: ""
28
123755856
Returns: "())))((()(()(()())((()())((("
29
536870911
Returns: ")))))))))))))))))))))))))))))"
29
373288042
Returns: ")())((()))))))))())((())()()("
30
1064046978
Returns: "))))))))))))))))))))))))))))))"
30
1064046979
Returns: ""
30
44182399
Returns: "(((()()())))(()(((()))))(((())"
31
2147483647
Returns: ")))))))))))))))))))))))))))))))"
31
2126177797
Returns: "))))))()()))()()))(())(((((()()"
32
4259609625
Returns: "))))))))))))))))))))))))))))))))"
32
4259609626
Returns: ""
32
4033078742
Returns: "))))(()(()))))))())()(())())))(("
33
8589934591
Returns: ")))))))))))))))))))))))))))))))))"
33
2006845483
Returns: "(()))())))(())))((((()((((()()())"
34
17050224393
Returns: "))))))))))))))))))))))))))))))))))"
34
17050224394
Returns: ""
34
3437302584
Returns: "(())()(()(())())()))()())))()((((("
35
34359738367
Returns: ")))))))))))))))))))))))))))))))))))"
35
6343774756
Returns: "(()())))()(((())))(()()(()((()(()(("
36
68241838035
Returns: "))))))))))))))))))))))))))))))))))))"
36
68241838036
Returns: ""
36
48612272768
Returns: ")())())())()))))))(()(())()()()())(("
37
137438953471
Returns: ")))))))))))))))))))))))))))))))))))))"
37
111288982727
Returns: "))(())))()(()()()()))((()))(())((()))"
38
273110643753
Returns: "))))))))))))))))))))))))))))))))))))))"
38
273110643754
Returns: ""
38
171283343091
Returns: ")()(((()(()()()(())))()())(()())(()(()"
39
549755813887
Returns: ")))))))))))))))))))))))))))))))))))))))"
39
49546981629
Returns: "((()()))((()(()(()))()())))(((())))))()"
40
1092947507355
Returns: "))))))))))))))))))))))))))))))))))))))))"
40
1092947507356
Returns: ""
40
150232777539
Returns: "(()((())))(()()()(()()(()()((()(()())((("
41
2199023255551
Returns: ")))))))))))))))))))))))))))))))))))))))))"
41
591845441298
Returns: "()((()(()))(())(()())))(()())))))((()(()("
42
4373580244083
Returns: "))))))))))))))))))))))))))))))))))))))))))"
42
4373580244084
Returns: ""
42
2327012505344
Returns: ")((()((())()))))))(((()))()(()(()()((())(("
43
8796093022207
Returns: ")))))))))))))))))))))))))))))))))))))))))))"
43
8324114891022
Returns: "))))(()(()(((())()))))()(()()((((()(((()))("
44
17500703480775
Returns: "))))))))))))))))))))))))))))))))))))))))))))"
44
17500703480776
Returns: ""
44
12853336518715
Returns: ")())))((()()))))(())()()()))))()()((()))(())"
44
1750070348077
Returns: "((())()((((()(()((())(()()()())()))))))()()("
44
15750633132697
Returns: ")))(())()((()(((())))()())())())())())()((()"
44
3500140696155
Returns: "(())(()))))((()(((()))(()(()))(())))(())((()"
44
14000562784620
Returns: "))(())()((()(((())))()())())())())())()(()(("
45
35184372088831
Returns: ")))))))))))))))))))))))))))))))))))))))))))))"
45
11371277174381
Returns: "()()(()()())))(()()(()))())))))((())(())())()"
46
70025684564013
Returns: "))))))))))))))))))))))))))))))))))))))))))))))"
46
70025684564014
Returns: ""
46
38722739321678
Returns: ")((()))(((())))())()))((()((())((((())(()((((("
46
7002568456401
Returns: "((())()((((((()()(()(()((()((())(()))((()))())"
46
63023116107611
Returns: ")))(())()(((())(()())(())(()()((((()))(()())()"
46
14005136912802
Returns: "(())(())))()()))()))))((())))()((())()))())((("
46
56020547651210
Returns: "))(())()(((())(()())(())(()()((((()))(()()))(("
47
140737488355327
Returns: ")))))))))))))))))))))))))))))))))))))))))))))))"
47
58292720851782
Returns: "())()()((((()((()()()(()))()())()())())()((())("
48
280185072563331
Returns: "))))))))))))))))))))))))))))))))))))))))))))))))"
48
280185072563332
Returns: ""
48
134391745160144
Returns: "())))())())(())())())((()((((()(())())))()(())(("
48
28018507256333
Returns: "((())(()))))))(())(((((())))(()))(()())())(())()"
48
252166565306997
Returns: ")))(())()(((()((())()))())()(()))))())()))))((()"
48
56037014512666
Returns: "(())(())))(())())))(()((()())))))((())(((()))((("
48
224148058050664
Returns: "))(())()(((()((())()))())()(()))))())()))))(()(("
49
562949953421311
Returns: ")))))))))))))))))))))))))))))))))))))))))))))))))"
49
205024144367704
Returns: "()()))()(()))())))))(()))()(()()))()(((((()())((("
50
1121037960441171
Returns: "))))))))))))))))))))))))))))))))))))))))))))))))))"
50
1121037960441172
Returns: ""
50
241754441533282
Returns: "(())()))))((())))))(((()())))()()))((()))()(()(()("
50
112103796044117
Returns: "((())(()))))()))()))))(())())(())()()(()(()(())(()"
50
1008934164397053
Returns: ")))(())()((((()()())(())()(((())))(((()))()()()(()"
50
224207592088234
Returns: "(())(())))((()()(())((()))())()(((((((()())()((()("
50
896830368352936
Returns: "))(())()((((()()())(())()(((())))(((()))()()()()(("
50
999999999999999
Returns: ")))(()((())))()()()()(()))()()))()((()(()()()()())"
50
1073741824
Returns: "((((((((((((((((((()((((((((((((()))((((())(()))()"
50
562949953421312
Returns: ")(((((()((())())(((((((()()(()())()(()(()()()())(("
50
1125899906842622
Returns: ""
50
4294967296
Returns: "((((((((((((((((()(((((((((()(()())((()(((((()(((("
50
936489623
Returns: "(((((((((((((((((((())()))))()(()(())(())))(((()(("
50
1099513627778
Returns: "((((((((()(((((()))))))())((((()()()())(()())((()("
50
3284224
Returns: "(((((((((((((((((((((((((((())(()(((()))()(((((((("
50
1000000000000
Returns: "(((((((((()))())((()((())())(((()(((((())())()(())"
50
587272728
Returns: "(((((((((((((((((((()((())((((((()())((((())(()((("
50
562949953421311
Returns: ")(((((()((())())(((((((()()(()())()(()(()()()()())"
50
1021037960441171
Returns: ")))()(()()(((())(()))()))))(((()())())))))))))))))"
50
11258999068
Returns: "(((((((((((((((()()(()))))))(()()())))())())))((()"
50
1121037960441164
Returns: ")))))))))))))))))))))))))))))))))))))))))))))))((("
4
7
Returns: ")(()"
49
100002
Returns: "(((((((((((((((((((((((((((((((())(((())()()((()("