fork download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.io.*;
  6.  
  7. /* Name of the class has to be "Main" only if the class is public. */
  8. class Ideone
  9. {
  10. private static boolean canMakePalindrome(String str){
  11. int[] arr = new int[255];
  12. for (int i = 0; i<str.length(); i++) {
  13. arr[str.charAt(i)] += 1;
  14. }
  15. int count = 0;
  16. for(int i=0; i<255; ++i){
  17. if((arr[i]&1)==1){
  18. count++;
  19. }
  20. }
  21. return count > 1 ? false : true;
  22. }
  23. // Make Palindrome from given String
  24. private static boolean canMakePalindrome(String str, String[] strs){
  25. int[] arr = new int[256];
  26. for (int i = 0; i<str.length(); i++) {
  27. arr[str.charAt(i)] += 1;
  28. }
  29. int count = 0;
  30. for(int i=0; i<256; ++i){
  31. if((arr[i]&1)==1){
  32. count++;
  33. strs[1] = (char)i+"";
  34. } else {
  35. for (int j = 0; j < arr[i]/2; j++) {
  36. strs[0] += (char)i+"";
  37. }
  38. }
  39. }
  40. return count < 2;
  41. }
  42.  
  43.  
  44.  
  45. private static ArrayList<String> generateAllPalidromes(String str, String center){
  46. ArrayList<String> arr = new ArrayList<String>();
  47. generatePalidrome(str, "", arr);
  48. for (int i = 0; i < arr.size(); i++) {
  49. String a = arr.get(i) + center + new StringBuilder(arr.get(i)).reverse().toString();
  50. arr.set(i, a);
  51. }
  52. return arr;
  53. }
  54.  
  55. private static void generatePalidrome(String str, String prefix, ArrayList<String> arr){
  56. int n = str.length();
  57. if(n==0){
  58. arr.add(prefix);
  59. } else {
  60. for (int i = 0; i < n; i++) {
  61. generatePalidrome(str.substring(0,i) + str.substring(i+1,n), prefix+str.charAt(i), arr);
  62. }
  63. }
  64. }
  65.  
  66. public static void testCanMakePalindrome(){
  67. assert true : canMakePalindrome("1");
  68. assert true : canMakePalindrome("122");
  69. assert true : canMakePalindrome("1122");
  70. assert false : canMakePalindrome("111222");
  71. }
  72.  
  73. public static void main(String[] args) {
  74. String[] strs = {"","0"};
  75. String[] targets = {
  76. "",
  77. "1",
  78. "12",
  79. "121",
  80. "1221",
  81. "12321",
  82. };
  83. for(String target: targets) {
  84. if (canMakePalindrome(target, strs)) {
  85. String center = strs[1]; //"1";
  86. String str = strs[0]; //"123";
  87. System.out.printf("center: %s str: %s\n", center, str);
  88.  
  89. ArrayList<String> arr = generateAllPalidromes(str, center);
  90. for (int i = 0; i < arr.size(); i++) {
  91. System.out.println(arr.get(i));
  92. }
  93. } else {
  94. System.out.printf("No Solution for %s\n", target);
  95. }
  96. }
  97. }
  98. }
Success #stdin #stdout 0.12s 320448KB
stdin
Standard input is empty
stdout
center: 0 str: 
0
center: 1 str: 
1
No Solution for 12
center: 2 str: 1
121
center: 2 str: 112
1122211
1212121
1122211
1212121
2112112
2112112
center: 3 str: 11212
11212321211
11221312211
11122322111
11122322111
11221312211
11212321211
12112321121
12121312121
12112321121
12121312121
12211311221
12211311221
11122322111
11122322111
11212321211
11221312211
11212321211
11221312211
12121312121
12112321121
12211311221
12211311221
12112321121
12121312121
11212321211
11221312211
11122322111
11122322111
11221312211
11212321211
12112321121
12121312121
12112321121
12121312121
12211311221
12211311221
11122322111
11122322111
11212321211
11221312211
11212321211
11221312211
12121312121
12112321121
12211311221
12211311221
12112321121
12121312121
21112321112
21121312112
21112321112
21121312112
21211311212
21211311212
21112321112
21121312112
21112321112
21121312112
21211311212
21211311212
21112321112
21121312112
21112321112
21121312112
21211311212
21211311212
22111311122
22111311122
22111311122
22111311122
22111311122
22111311122
11122322111
11122322111
11212321211
11221312211
11212321211
11221312211
11122322111
11122322111
11212321211
11221312211
11212321211
11221312211
12112321121
12121312121
12112321121
12121312121
12211311221
12211311221
12112321121
12121312121
12112321121
12121312121
12211311221
12211311221
21121312112
21112321112
21211311212
21211311212
21112321112
21121312112
21121312112
21112321112
21211311212
21211311212
21112321112
21121312112
22111311122
22111311122
22111311122
22111311122
22111311122
22111311122
21112321112
21121312112
21112321112
21121312112
21211311212
21211311212