基本思路是找中间位置,然后镜像调换。
需要注意的是,以字符串长度/2做中间值和以字符数组最大索引做中间值的区别。
1,递归法
public static String swap1(String str) {
if (null == str) {
return str;
}
char[] oldArr = str.toCharArray();
return recursive(oldArr, 0);
}
private static String recursive(char[] oldArr, int i) {
int indexMax = oldArr.length - 1;
int half = (indexMax - 1) >> 1;
if (i > half) {
return new String(oldArr);
} else {
char a = oldArr[i];
oldArr[i] = oldArr[indexMax - i];
oldArr[indexMax - i] = a;
return recursive(oldArr, ++i);
}
}
2, 非递归法
public static String swap(String str) {
if (null == str) {
return str;
}
int len = str.length();
char[] oldArr = str.toCharArray();
int index = len - 1;
int half = (index - 1) >> 1;
for (int i = 0; i <= half; i++) {
char a = oldArr[i];
oldArr[i] = oldArr[index - i];
oldArr[index - i] = a;
}
return new String(oldArr);
}
3, 利用栈来实现
入栈(push)出栈(pop)即可