File tree 4 files changed +115
-4
lines changed
solution/1100-1199/1190.Reverse Substrings Between Each Pair of Parentheses
4 files changed +115
-4
lines changed Original file line number Diff line number Diff line change 53
53
54
54
<!-- 这里可写通用的实现逻辑 -->
55
55
56
+ 用双端队列或者栈,模拟反转过程
57
+
56
58
<!-- tabs:start -->
57
59
58
60
### ** Python3**
59
61
60
62
<!-- 这里可写当前语言的特殊实现逻辑 -->
61
63
62
64
``` python
63
-
65
+ class Solution :
66
+ def reverseParentheses (self , s : str ) -> str :
67
+ stack = []
68
+ for c in s:
69
+ if c == " )" :
70
+ tmp = []
71
+ while stack[- 1 ] != " (" :
72
+ tmp += stack.pop()
73
+ stack.pop()
74
+ stack += tmp
75
+ else :
76
+ stack.append(c)
77
+ return " " .join(stack)
64
78
```
65
79
66
80
### ** Java**
67
81
68
82
<!-- 这里可写当前语言的特殊实现逻辑 -->
69
83
70
84
``` java
71
-
85
+ class Solution {
86
+ public String reverseParentheses (String s ) {
87
+ Deque<Character > deque = new ArrayDeque<> ();
88
+ for (char c : s. toCharArray()) {
89
+ if (c == ' )' ) {
90
+ StringBuilder sb = new StringBuilder ();
91
+ while (deque. peekLast() != ' (' ) {
92
+ sb. append(deque. pollLast());
93
+ }
94
+ deque. pollLast();
95
+ for (int i = 0 , n = sb. length(); i < n; i++ ) {
96
+ deque. offerLast(sb. charAt(i));
97
+ }
98
+ } else {
99
+ deque. offerLast(c);
100
+ }
101
+ }
102
+ StringBuilder sb = new StringBuilder ();
103
+ while (! deque. isEmpty()) {
104
+ sb. append(deque. pollFirst());
105
+ }
106
+ return sb. toString();
107
+ }
108
+ }
72
109
```
73
110
74
111
### ** ...**
Original file line number Diff line number Diff line change 53
53
54
54
## Solutions
55
55
56
+ Use deque or stack to simulate the reversal process.
57
+
56
58
<!-- tabs:start -->
57
59
58
60
### ** Python3**
59
61
60
62
``` python
61
-
63
+ class Solution :
64
+ def reverseParentheses (self , s : str ) -> str :
65
+ stack = []
66
+ for c in s:
67
+ if c == " )" :
68
+ tmp = []
69
+ while stack[- 1 ] != " (" :
70
+ tmp += stack.pop()
71
+ stack.pop()
72
+ stack += tmp
73
+ else :
74
+ stack.append(c)
75
+ return " " .join(stack)
62
76
```
63
77
64
78
### ** Java**
65
79
66
80
``` java
67
-
81
+ class Solution {
82
+ public String reverseParentheses (String s ) {
83
+ Deque<Character > deque = new ArrayDeque<> ();
84
+ for (char c : s. toCharArray()) {
85
+ if (c == ' )' ) {
86
+ StringBuilder sb = new StringBuilder ();
87
+ while (deque. peekLast() != ' (' ) {
88
+ sb. append(deque. pollLast());
89
+ }
90
+ deque. pollLast();
91
+ for (int i = 0 , n = sb. length(); i < n; i++ ) {
92
+ deque. offerLast(sb. charAt(i));
93
+ }
94
+ } else {
95
+ deque. offerLast(c);
96
+ }
97
+ }
98
+ StringBuilder sb = new StringBuilder ();
99
+ while (! deque. isEmpty()) {
100
+ sb. append(deque. pollFirst());
101
+ }
102
+ return sb. toString();
103
+ }
104
+ }
68
105
```
69
106
70
107
### ** ...**
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public String reverseParentheses (String s ) {
3
+ Deque <Character > deque = new ArrayDeque <>();
4
+ for (char c : s .toCharArray ()) {
5
+ if (c == ')' ) {
6
+ StringBuilder sb = new StringBuilder ();
7
+ while (deque .peekLast () != '(' ) {
8
+ sb .append (deque .pollLast ());
9
+ }
10
+ deque .pollLast ();
11
+ for (int i = 0 , n = sb .length (); i < n ; i ++) {
12
+ deque .offerLast (sb .charAt (i ));
13
+ }
14
+ } else {
15
+ deque .offerLast (c );
16
+ }
17
+ }
18
+ StringBuilder sb = new StringBuilder ();
19
+ while (!deque .isEmpty ()) {
20
+ sb .append (deque .pollFirst ());
21
+ }
22
+ return sb .toString ();
23
+ }
24
+ }
Original file line number Diff line number Diff line change
1
+ class Solution :
2
+ def reverseParentheses (self , s : str ) -> str :
3
+ stack = []
4
+ for c in s :
5
+ if c == ")" :
6
+ tmp = []
7
+ while stack [- 1 ] != "(" :
8
+ tmp += stack .pop ()
9
+ stack .pop ()
10
+ stack += tmp
11
+ else :
12
+ stack .append (c )
13
+ return "" .join (stack )
You can’t perform that action at this time.
0 commit comments