package com.interview.array;
import java.util.Arrays;
/**
* Date 02/26/2016
* @author Tushar Roy
*
* Time complexity : O(n^2)
* Space complexity : O(n)
*
* Reference
* http://www.geeksforgeeks.org/form-minimum-number-from-given-sequence/
*/
public class MinimumNumberFromSequence {
public int[] find(char[] input) {
int[] output = new int[input.length + 1];
output[0] = 1;
int low = 0;
int start = 0;
for (int i = 0; i < input.length; i++) {
if (input[i] == 'D') {
output[i + 1] = output[i] - 1;
if (output[i+1] == low) {
for (int j = start; j <= i + 1; j++) {
output[j] = output[j] + 1;
}
}
} else {
low = output[start];
output[i + 1] = low + 1;
start = i + 1;
}
}
return output;
}
public static void main(String args[]) {
MinimumNumberFromSequence ms = new MinimumNumberFromSequence();
int output[] = ms.find("DDIDDIID".toCharArray());
System.out.println(Arrays.toString(output));
output = ms.find("IIDDD".toCharArray());
System.out.println(Arrays.toString(output));
output = ms.find("DIDI".toCharArray());
System.out.println(Arrays.toString(output));
}
}