比较简单的一题,而且可以通过多种方法解决。
思路1:使用递归。边界条件即为字符串的长度为1。
public static String reverse1(String s) {
if(s==null||s.length()==0)
return s;
return s.length()==1?s:reverse1(s.substring(1))+s.charAt(0);
}
递归的思路非常直接,但频繁地切分和拼接字符串会导致性能不佳,因为字符串是一个不可变对象,任何对字符串修改的方法其实都直接new一个修改后的字符串返回。
思路2:将字符串转化为字符数组,然后将数组反序即可。
public static String reverse2(String s) {
if(s==null||s.length()==0)
return s;
char c[] = s.toCharArray();
int length = s.length();
for(int i=0;i<length/2;i++)
swap(c,i,length-1-i);
return new String(c);
}
先转化成字符数组再操作,有效地减少了对字符串的直接操作。
思路3:将一个字符串反序其实就是将其逆序输出:
public static String reverse3(String s) {
if(s==null||s.length()==0)
return s;
char c[] = s.toCharArray();StringBuilder sb = new StringBuilder();
for(int i=c.length-1;i>-1;i--)
sb.append(c[i]);
return sb.toString();
}
直接反序输出即可,这里使用了StringBuilder类,它与String类相似,但其内部实现是一个非final的字符数组,可以直接修改而无需再次创建对象,在字符串频繁拼接场景相比String性能大大提高。
如果你有更好的思路欢迎在评论区分享交流,感谢观看。