天天看點

Java字元串反轉的幾種方法 數冒泡對調效率最佳了

字元串反轉應該是比較常碰見的問題,今天我們來練一練 多種算法的效率如何

有遞歸法(不推薦)、數組倒序拼接、冒泡對調、使用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位英文字元作為輸入,看下執行一遍的時間,不能說明哪種速度快

Java字元串反轉的幾種方法 數冒泡對調效率最佳了

那麼執行百萬次呢?試試五百萬次

Java字元串反轉的幾種方法 數冒泡對調效率最佳了

足以說明 遞歸真的速度慢,還屬冒泡的速度最快效率最高了。好啦,實驗結束哈哈哈哈不喜勿噴噢

繼續閱讀