任何人都可以帮我解决下面的问题
检查字符串是否为回文。如果绳子不是回文,那就把它做成回文。
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--;
}
答案 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;
}