Advertisement
Guest User

Untitled

a guest
May 22nd, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.78 KB | None | 0 0
  1. /*
  2.  * To change this license header, choose License Headers in Project Properties.
  3.  * To change this template file, choose Tools | Templates
  4.  * and open the template in the editor.
  5.  */
  6.  
  7. import java.util.ArrayList;
  8. import java.util.Arrays;
  9. import java.util.Collections;
  10. import java.util.List;
  11. import java.util.Comparator;
  12. import java.util.Scanner;
  13. import java.util.stream.Collectors;
  14.  
  15. /**
  16.  *
  17.  * @author macair
  18.  *
  19.  */
  20. public class Palindrome {
  21.  
  22.     public static List<Integer> mirrorArrayListEven(List<Integer> array) {
  23.         for (int i = array.size() - 1; i >= 0; i--) {
  24.             array.add(array.get(i));
  25.         }
  26.  
  27.         return array;
  28.  
  29.     }
  30.  
  31.     public static List<Integer> mirrorArrayListUneven(List<Integer> array) {
  32.         for (int i = array.size() - 2; i >= 0; i--) {
  33.             array.add(array.get(i));
  34.         }
  35.  
  36.         return array;
  37.  
  38.     }
  39.  
  40.     public static List<Integer> generatePalindrome(ArrayList<Integer> array) {
  41.         List<Integer> list=new ArrayList<>();
  42.         int[] distinct =new int[array.stream().distinct().sorted(Comparator.reverseOrder()).collect(Collectors.toList()).size()];
  43.         distinct[0]=1;
  44.        
  45.         list=array.stream().distinct().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
  46.         List<Integer>finalList=new ArrayList<>();
  47.         List<Integer> arraySorted=array.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
  48.         int position=-1;
  49.         boolean isPalindrome=true;
  50.         boolean hasMoreThanOneOdd=false;
  51.      
  52.        
  53.        
  54.        
  55.         int j=0;
  56.        
  57.        
  58.         for(int i=1;i<array.size();i++){
  59.             if(arraySorted.get(i)!=arraySorted.get(i-1)){
  60.                 j++;
  61.                 distinct[j]++;
  62.                            
  63.             }else if(arraySorted.get(i)==arraySorted.get(i-1)){
  64.                 distinct[j]++;
  65.             }
  66.      
  67.         }
  68.         for(int i=0;i<distinct.length;i++){
  69.             if(distinct[i]%2!=0){
  70.                 position=i;
  71.              
  72.             }
  73.         }
  74.         for(int i=0;i<distinct.length;i++){
  75.             if(distinct[i]<2){
  76.                if(hasMoreThanOneOdd){
  77.                    isPalindrome=false;
  78.                }
  79.              
  80.                 hasMoreThanOneOdd=true;
  81.            
  82.                
  83.             }
  84.              
  85.         }
  86.        
  87.        
  88.        
  89.        
  90.         for(int i=0;i<distinct.length;i++){
  91.             distinct[i]/=2 + distinct[i]%2;
  92.         }
  93.        
  94.         for(int i=0;i<distinct.length;i++){
  95.             for(int h=0;h<distinct[i];h++){
  96.                 finalList.add(list.get(i));
  97.             }
  98.            
  99.         }
  100.        
  101.         if(position>-1){
  102.             finalList.add(list.get(position));
  103.         }
  104.        
  105.  
  106.         if (position==-1 && isPalindrome==true) {
  107.             return  mirrorArrayListEven(finalList);
  108.  
  109.         }
  110.         else if(isPalindrome==false){
  111.            
  112.             finalList.clear();
  113.             finalList.add(0);
  114.             return finalList;
  115.         }
  116.         else  {
  117.             return  mirrorArrayListUneven(finalList);
  118.         }
  119.  
  120.     }
  121.  
  122.     public static void main(String[] args) {
  123.         Scanner sc = new Scanner(System.in);
  124.         List<Integer> finalList=new ArrayList<>() ;
  125.         ArrayList<Integer> array = new ArrayList<>();
  126.  
  127.         int n = sc.nextInt();
  128.  
  129.         for (int i = 0; i < n; i++) {
  130.             array.add(sc.nextInt());
  131.         }
  132.  
  133.         finalList = generatePalindrome(array);
  134.         Collections.reverse(array);
  135.         if (finalList.get(0)==0) {
  136.             System.out.println(0);
  137.         } else {
  138.             for (int i = 0; i < finalList.size(); i++) {
  139.                 System.out.print(finalList.get(i));
  140.             }
  141.         }
  142.  
  143.     }
  144.  
  145. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement