Skip to content

Commit e6e78d8

Browse files
committed
feat: add solutions to lc problem: No.1190. Reverse Substrings Between Each Pair of Parentheses
1 parent f3267fc commit e6e78d8

File tree

4 files changed

+115
-4
lines changed

4 files changed

+115
-4
lines changed

solution/1100-1199/1190.Reverse Substrings Between Each Pair of Parentheses/README.md

+39-2
Original file line numberDiff line numberDiff line change
@@ -53,22 +53,59 @@
5353

5454
<!-- 这里可写通用的实现逻辑 -->
5555

56+
用双端队列或者栈,模拟反转过程
57+
5658
<!-- tabs:start -->
5759

5860
### **Python3**
5961

6062
<!-- 这里可写当前语言的特殊实现逻辑 -->
6163

6264
```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)
6478
```
6579

6680
### **Java**
6781

6882
<!-- 这里可写当前语言的特殊实现逻辑 -->
6983

7084
```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+
}
72109
```
73110

74111
### **...**

solution/1100-1199/1190.Reverse Substrings Between Each Pair of Parentheses/README_EN.md

+39-2
Original file line numberDiff line numberDiff line change
@@ -53,18 +53,55 @@
5353

5454
## Solutions
5555

56+
Use deque or stack to simulate the reversal process.
57+
5658
<!-- tabs:start -->
5759

5860
### **Python3**
5961

6062
```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)
6276
```
6377

6478
### **Java**
6579

6680
```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+
}
68105
```
69106

70107
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
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 numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
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)

0 commit comments

Comments
 (0)