Sponsored
Sponsored
Utilize a stack to handle the nested or paired parentheses efficiently. By pushing characters onto a stack until a closing parenthesis is encountered, then reversing the needed substring, you can leverage the stack's LIFO properties to achieve the desired result.
Time Complexity: O(n).
Space Complexity: O(n) due to the stack usage for storing characters.
1#include <stdio.h>
2#include <string.h>
3#include <stdlib.h>
4
5char* reverseParentheses(char* s) {
6 char stack[2000];
7 int top = -1;
8 int n = strlen(s);
9
10 for (int i = 0; i < n; i++) {
11 if (s[i] == ')') {
12 int start = top;
13 while (stack[top] != '(') top--;
14 top--; // pop '('
15 for (int k = start; k > top; k--)
16 stack[++top] = stack[k];
17 } else {
18 stack[++top] = s[i];
19 }
20 }
21 stack[top + 1] = '\0';
22 return strdup(stack);
23}
24
25int main() {
26 char s[] = "(u(love)i)";
27 char* result = reverseParentheses(s);
28 printf("%s\n", result);
29 free(result);
30 return 0;
31}
32
This C solution uses an array-based stack to reverse substrings between parenthesis pairs. It iterates through the string, storing characters inside a stack until a closing parenthesis requires a substring reversal. The reversed substring is then pushed back onto the stack, achieving the desired sequence without parentheses.
This approach involves separately building the result string in a single pass using an auxiliary data structure to track position swaps. The use of local in-string reversals enables an efficient and clean traversal building mechanism.
Time Complexity: O(n).
Space Complexity: O(n), using additional space for parentheses pair tracking and intermediate char arrays.
1#include <vector>
#include <stack>
using namespace std;
string reverseParentheses(string s) {
int n = s.length();
vector<int> pair(n, 0);
stack<int> st;
for (int i = 0; i < n; i++) {
if (s[i] == '(') st.push(i);
else if (s[i] == ')') {
int j = st.top(); st.pop();
pair[i] = j;
pair[j] = i;
}
}
string result;
for (int i = 0, d = 1; i < n; i += d) {
if (s[i] == '(' || s[i] == ')') {
i = pair[i];
d = -d;
} else {
result += s[i];
}
}
return result;
}
int main() {
string s = "(ed(et(oc))el)";
cout << reverseParentheses(s) << endl;
return 0;
}
This C++ solution uses a vector for holding paired indices and a stack to manage parenthesis processing. The method effectively accounts for necessary positional reversals, facilitating a clean string pass strategy to build results without additional data structure overhead.