package platform.leetcode.problem0011;
import base.ISolution;
import common.Entry;
import common.io.input.InputReader;
import java.io.InputStream;
import java.util.Stack;
/**
*
* @author Saurabh Dutta
* @see <a href="https://leetcode.com/problems/minimum-remove-to-make-valid-parentheses/">https://leetcode.com/problems/minimum-remove-to-make-valid-parentheses/</a>
*
**/
public class MinimumRemoveValidParenthesis implements ISolution {
@Override
public void solve(InputStream in) throws Exception{
InputReader reader = new InputReader(in);
String input = reader.readLine();
String output = minRemoveToMakeValid(input);
System.out.println(output);
}
@Entry
public String minRemoveToMakeValid(String input) {
char[] arr = input.toCharArray();
Stack<Character> bracketStack = new Stack<>();
StringBuilder output = new StringBuilder();
for (int i=0;i < arr.length; i++){
char c = arr[i];
if (c == '(' ) {
bracketStack.push(c);
output.append('_');
} else if (c == ')') {
if (!bracketStack.empty()) {
Character bracketPair = bracketStack.pop();
int index = output.lastIndexOf("_");
output.deleteCharAt(index);
output.insert(index, bracketPair);
output.append(c);
}
} else {
output.append(c);
}
}
return output.toString().replace("_", "");
}
}
package platform.leetcode.problem0012;
import base.ISolution;
import common.Entry;
import common.io.input.InputReader;
import common.io.utils.Utility;
import java.io.InputStream;
/**
* @author Saurabh Dutta
* @see <a href="https://leetcode.com/problems/sort-colors/">https://leetcode.com/problems/sort-colors/</a>
**/
public class SortColors implements ISolution {
@Override
public void solve(InputStream in) throws Exception {
InputReader reader = new InputReader(in);
String line = reader.readLine();
int[] nums = Utility.getIntArray(line);
sortColors(nums);
Utility.printArray(nums);
}
@Entry
public void sortColors(int[] nums) {
sort(nums, 0, nums.length -1);
}
void sort(int[] arr, int low, int high) {
if (low < high) {
int pi = partition(arr, low, high);
sort(arr, low, pi - 1);
sort(arr, pi + 1, high);
}
}
int partition(int[] arr, int low, int high) {
int pivot = arr[high];
int i = (low - 1); // index of smaller element
for (int j = low; j < high; j++) {
// If current element is smaller than the pivot
if (arr[j] < pivot) {
i++;
Utility.swap(arr, i, j);
}
}
Utility.swap(arr, i+1, high);
return i + 1;
}
}