经典面试题之反转字符串(字符串处理)

时间:2021-11-27 04:18:48

比较简单的一题,而且可以通过多种方法解决。


思路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性能大大提高。

如果你有更好的思路欢迎在评论区分享交流,感谢观看。