Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Collections;
- import java.util.List;
- import java.util.Comparator;
- import java.util.Scanner;
- import java.util.stream.Collectors;
- /**
- *
- * @author macair
- *
- */
- public class Palindrome {
- public static List<Integer> mirrorArrayListEven(List<Integer> array) {
- for (int i = array.size() - 1; i >= 0; i--) {
- array.add(array.get(i));
- }
- return array;
- }
- public static List<Integer> mirrorArrayListUneven(List<Integer> array) {
- for (int i = array.size() - 2; i >= 0; i--) {
- array.add(array.get(i));
- }
- return array;
- }
- public static List<Integer> generatePalindrome(ArrayList<Integer> array) {
- List<Integer> list=new ArrayList<>();
- int[] distinct =new int[array.stream().distinct().sorted(Comparator.reverseOrder()).collect(Collectors.toList()).size()];
- distinct[0]=1;
- list=array.stream().distinct().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
- List<Integer>finalList=new ArrayList<>();
- List<Integer> arraySorted=array.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
- int position=-1;
- boolean isPalindrome=true;
- boolean hasMoreThanOneOdd=false;
- int j=0;
- for(int i=1;i<array.size();i++){
- if(arraySorted.get(i)!=arraySorted.get(i-1)){
- j++;
- distinct[j]++;
- }else if(arraySorted.get(i)==arraySorted.get(i-1)){
- distinct[j]++;
- }
- }
- for(int i=0;i<distinct.length;i++){
- if(distinct[i]%2!=0){
- position=i;
- }
- }
- for(int i=0;i<distinct.length;i++){
- if(distinct[i]<2){
- if(hasMoreThanOneOdd){
- isPalindrome=false;
- }
- hasMoreThanOneOdd=true;
- }
- }
- for(int i=0;i<distinct.length;i++){
- distinct[i]/=2 + distinct[i]%2;
- }
- for(int i=0;i<distinct.length;i++){
- for(int h=0;h<distinct[i];h++){
- finalList.add(list.get(i));
- }
- }
- if(position>-1){
- finalList.add(list.get(position));
- }
- if (position==-1 && isPalindrome==true) {
- return mirrorArrayListEven(finalList);
- }
- else if(isPalindrome==false){
- finalList.clear();
- finalList.add(0);
- return finalList;
- }
- else {
- return mirrorArrayListUneven(finalList);
- }
- }
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- List<Integer> finalList=new ArrayList<>() ;
- ArrayList<Integer> array = new ArrayList<>();
- int n = sc.nextInt();
- for (int i = 0; i < n; i++) {
- array.add(sc.nextInt());
- }
- finalList = generatePalindrome(array);
- Collections.reverse(array);
- if (finalList.get(0)==0) {
- System.out.println(0);
- } else {
- for (int i = 0; i < finalList.size(); i++) {
- System.out.print(finalList.get(i));
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement