saravanancomsc
BAN USERpublic static String[] reArrangeString(String[] input) {
String[] response = new String[input.length];
for (int i = 0; i < input.length; i++) {
response[i] = checkPalindrome(input[i]);
System.out.println(input[i] + ":" + response[i]);
}
return response;
}
public static String checkPalindrome(final String inputString) {
String response = null;
if (inputString != null && inputString.length() > 0) {
char[] arrayChr = inputString.toCharArray();
Arrays.sort(arrayChr);
List<Character> indiv = new ArrayList<Character>();
Stack<Character> stackChr = new Stack<Character>();
for (char c : arrayChr) {
if (!stackChr.isEmpty()) {
if (c == stackChr.peek()) {
stackChr.pop();
} else {
if (inputString.length() % 2 != 0) {
indiv.add(stackChr.pop());
stackChr.push(c);
if (indiv.size() > 1)
return "-1";
} else {
return "-1";
}
}
} else {
stackChr.push(c);
}
}
if (!stackChr.isEmpty())
indiv.add(stackChr.pop());
if (indiv.size() == 1) {
response = convertToPalindrome(arrayChr, indiv.get(0));
} else {
response = convertToPalindrome(arrayChr, '\u0000');
}
} else {
return "-1";
}
return response;
}
public static String convertToPalindrome(final char[] arrayChr,
char indivChar) {
Stack<Character> arrangeChar = new Stack<Character>();
StringBuffer buff = new StringBuffer();
Queue<Character> queue = new LinkedList<Character>();
for (char c : arrayChr) {
if (indivChar != c)
queue.add(c);
}
while (!queue.isEmpty()) {
buff.append(queue.poll());
arrangeChar.push(queue.poll());
}
if (indivChar != '\u0000') {
buff.append(indivChar);
}
while (!arrangeChar.isEmpty()) {
buff.append(arrangeChar.pop());
}
return buff.toString();
}
- saravanancomsc November 09, 2015