使用java将给定的字符串作为回文

时间:2014-11-23 18:49:28

标签: java algorithm data-structures

任何人都可以帮我解决下面的问题

检查字符串是否为回文。如果绳子不是回文,那就把它做成回文。

eg: input: ABC, output: ABCBA

我知道如何检查字符串是否是回文。请在问题的第二部分提供帮助。

在最好的情况下,如果我们能够达到以下结果,那就更好了

eg: input: AAB, output: ABA

对于第一例,我试过这种方法

 LinkedList <String> q = new LinkedList<>();
    //String [] ar ={"a","b","c","b","d"};
    String [] ar ={"A","B","C"};;
    int mid=ar.length/2;

    q.addFirst(ar[mid]);
    for(int i= mid, j=mid; i>=0&&j<ar.length;){
        if(j+1==ar.length && i-1==-1)
            break;
        q.addFirst(ar[i-1]);
        if(ar[i-1]!=ar[j+1]){
            q.addLast(ar[i-1]);
            q.addLast(ar[j+1]);
            q.addFirst(ar[j+1]);

        }else{
            q.addLast(ar[j+1]);
        }
        j++;
        i--;
    }

1 个答案:

答案 0 :(得分:1)

回答我自己的问题。 第二个例子

public static boolean makePal(String input){

    HashMap<Character, Integer> map = new HashMap<>();
    int value =1, numberOfOddOccurence = 0;
    //find the number of occurrences
    for(int i=0; i<input.length(); i++){
        char key = input.charAt(i);
        if(!map.containsKey(key)){
            map.put(key, value);
        }else{
            map.put(key, map.get(key)+1);
        }
    }

    //find the number of char with odd counts
    for(Map.Entry<Character, Integer> a : map.entrySet()){
        if(a.getValue()%2==1){
            numberOfOddOccurence++;
        }
    }

    if(numberOfOddOccurence>1)
        return false;
    else{
        char [] charArray = new char[input.length()];
        int cursor = 0;
        for(Map.Entry<Character, Integer> a : map.entrySet()){
            if(a.getValue()%2==0){
                charArray[cursor] = (char)(a.getKey());
                charArray[input.length()-cursor-1] = (char)(a.getKey());
                cursor++;
            }else{
                charArray[(int) Math.ceil(input.length()/2)] = (char) (a.getKey());
            }
        }
        System.out.println(String.valueOf(charArray));
    }

    return true;
}