decoding strings
import java.util.*;
public class DecodingAString {
public static String Decode(String str) {
Stack<Integer> integerstack = new Stack<>();
Stack<Character> stringstack = new Stack<>();
String temp = "";
String result = "";
for (int i = 0; i < str.length(); i++) {
int count = 0;
if (Character.isDigit(str.charAt(i))) {
while (Character.isDigit(str.charAt(i))) {
count = count * 10 + str.charAt(i) - '0';
i++;
}
i--;
integerstack.push(count);
} else if (str.charAt(i) == ']') {
temp = "";
count = 0;
if (!integerstack.isEmpty()) {
count = integerstack.peek();
integerstack.pop();
}
while (!stringstack.isEmpty() && stringstack.peek() != '[') {
temp = stringstack.peek() + temp;
stringstack.pop();
}
if (!stringstack.empty() && stringstack.peek() == '[') {
stringstack.pop();
}
for (int j = 0; j < count; j++) {
result = result + temp;
}
for (int j = 0; j < result.length(); j++) {
stringstack.push(result.charAt(j));
}
result = "";
}
else if (str.charAt(i) == '[') {
if (Character.isDigit(str.charAt(i - 1))) {
stringstack.push(str.charAt(i));
} else {
stringstack.push(str.charAt(i));
integerstack.push(i);
}
}
else {
stringstack.push(str.charAt(i));
}
}
while (!stringstack.isEmpty()) {
result = stringstack.peek() + result;
stringstack.pop();
}
return result;
}
public static void main(String[] args) {
String str = "3[b2[ca]]";
System.out.println(Decode(str));
}
}
Comments
Post a Comment