字符串反转应该是比较常碰见的问题,今天我们来练一练 多种算法的效率如何
有递归法(不推荐)、数组倒序拼接、冒泡对调、使用StringBuffer的reverse方法等。
//递归方法
public static String reverse1(String s) {
int length = s.length();
if (length <= 1) {
return s;
}
String left = s.substring(0, length / 2);
String right = s.substring(length / 2, length);
return reverse1(right) + reverse1(left);
}
递归的时间复杂度太高了,而且会随着字符串的长度增加而增加,效率差。
//字符串转换成字符数组倒序拼接
public static String reverse2(String s) {
char[] array = s.toCharArray();
StringBuilder reverse = new StringBuilder();
for (int i = array.length - 1; i >= 0; i--)
reverse.append(array[i]);
return reverse.toString();
}
倒序拼接应该注意不用直接使用String拼接,应该使用StringBuilder,否则随着字符串的长度增加,两者的效率会很明显拉大。
//冒泡对调
public static String reverse3(String orig) {
char[] s = orig.toCharArray();
int n = s.length - 1;
int halfLength = n / 2;
for (int i = 0; i <= halfLength; i++) {
char temp = s[i];
s[i] = s[n - i];
s[n - i] = temp;
}
return new String(s);
}
冒泡排序法应该是很常见的算法,永远记得当初C++老师教的时候,说 三个等号 搞定哈哈哈哈
//调用StringBuffer中的reverse方法
public static String reverse4(String s) {
return new StringBuffer(s).reverse().toString();
}
这个方法是最简单的,一行代码搞定!
那么这四种算法 肯定有效率高低之分了,不然不同算法也没有意义了。
笔者使用 26位英文字符作为输入,看下执行一遍的时间,不能说明哪种速度快
那么执行百万次呢?试试五百万次
足以说明 递归真的速度慢,还属冒泡的速度最快效率最高了。好啦,实验结束哈哈哈哈不喜勿喷噢