package com.interview.flag.o;
/**
* Created_By: stefanie
* Date: 15-1-7
* Time: 下午3:15
*/
public class O6_NextPalindromeNumber {
public String next(String number){
char[] next = number.toCharArray();
boolean isBigger = false;
int front = 0;
int back = next.length - 1;
while(true){
if(next[front] > next[back]) isBigger = true;
else if(next[front] < next[back]) isBigger = false;
next[back] = next[front];
if(front == back || front + 1 == back) break;
front++; back--;
}
if(isBigger) return String.valueOf(next); //next is bigger than number
while(front >= 0 && next[front] == '9'){ //find the changeable digits from center
next[front--] = '0';
next[back++] = '0';
}
if(front >= 0){ //have changeable digit
next[front]++;
next[back] = next[front];
return String.valueOf(next);
} else { //no changeable digit to increase number, such as 99, 999, directly return 101, 1001
StringBuffer buffer = new StringBuffer();
buffer.append(1);
for(int i = 1; i < next.length; i++) buffer.append(0);
buffer.append(1);
return buffer.toString();
}
}
public static void main(String[] args){
O6_NextPalindromeNumber finder = new O6_NextPalindromeNumber();
System.out.println(finder.next("63525")); //63536
System.out.println(finder.next("62517")); //62526
System.out.println(finder.next("23545")); //23632
System.out.println(finder.next("2345")); //2442
System.out.println(finder.next("696")); //707
System.out.println(finder.next("99")); //101
System.out.println(finder.next("999")); //1001
}
}