简介
这是一个Java面试中被经常问及的问题,也有很多种实现方式。我在这里一一列出,如果你有更好的解法,也可留言。
解法一:首尾字符调换顺序
由于String对象是只读类型,不能对其进行直接操作,因此需要转换成字符数组,然后调换字符数组中的各个字符。
public String reverse(String str) {
//异常情况处理
if (str == null || str.length() <= 1) {
return str;
}
//调换首尾字符
char[] array = str.toCharArray();
int len = str.length();
for (int i = 0; i < len/2; i++) {
char temp = array[i];
array[i] = array[len - 1 - i];
array[len - 1 - i] = temp;
}
//产生新字符串
return new String(array);
}
这个算法实现需要注意的时,遍历时,到达中间节点遍历结束;如果操作遍历到尾部,相当于将字符串首尾调换后,又调换回原来的状态。
解法二:递归实现
递归算法的话可以每次将字符串首部字符追置换到尾部,并拼接成新的字符串;当字符串里仅有一个字符存在时,结束递归调用。
public String reverse(String str) {
//异常情况处理
if (str == nul