1. 程式人生 > >字符串反轉記錄總結

字符串反轉記錄總結

一次 In int char code version rem pac public

前文:

最近在一家公司面試問到這個問題,之前有看過,但印象不深,故也成為失敗因素的一點吧,特此記錄下來。

學習參考博客:https://blog.csdn.net/cghu1201/article/details/78490934

代碼:

package algorithm;

/**
 * @ProjectName: practice$
 * @Package: algorithm$
 * @ClassName: Reverse$
 * @Description:
 * @Author: WG
 * @CreateDate: 2018/6/22$ 19:19$
 * @UpdateUser: 更新者
 * @UpdateDate: 2018/6/22$ 19:19$
 * @UpdateRemark: 更新內容
 * @Version: 1.0
 
*/ public class Reverse { public static void main(String[] args) { String demo = "abcdefg"; String result = reverseRecurive(demo); System.out.println(result); } /** * 首先用String的charAt方法分解字符串,然後用一個臨時的字符串接收每次 * 循環的字符串,最後通過一個小技巧,把每次分解的字符串(s.charAt(i)+reverse;) * 的s.charAt(i)放在上一次字符串存儲的前面,就可的到後面的字符串在前面,而前面 * 的字符串在後面 * *
@param s * @return */ public static String CharAtReverse(String s) { int length = s.length(); String reverse = ""; for (int i = 0; i < length; i++) { reverse = s.charAt(i) + reverse; } return reverse; } /** * 這個方法直接把字符串轉換成char型數組,然後循環最後的字符,從後往前用 * 臨時字符串存儲,最後的字符串反轉的效果 * *
@param s * @return */ public static String reverseCharArray(String s) { char[] array = s.toCharArray(); String reverse = ""; for (int i = array.length - 1; i > 0; i--) { reverse += array[i]; } return reverse; } /** * 此方法最為快捷,直接用底層生成好的StringBuilder.reverse方法生成 * * @param s * @return */ public static String reverseStringBuilder(String s) { StringBuilder sb = new StringBuilder(s); String afterreverse = sb.reverse().toString(); return afterreverse; } /** * 最後遞歸方法也最難為理解,但也逼格最高。 * 算法過程:1.將字符串拆分成兩串,類似於半分查找,比如abcdefg,拆分成abc-defg * 2.將右邊的字符串放在臨時字符串的左邊位置,這是伏筆 * 3.將defg(reverseRecurive(right)) 繼續遞歸,可以得到 fg-de * 3.1 fg 遞歸 * gf 遞歸 g 單個 出口 f 單個 出口 * 然後演變成gf * 3.2 de 遞歸 * .... * 4.將 abc遞歸(reverseRecurive(left)) * .... * * 最後得出右邊遞歸後的順序+左邊遞歸後的順序 * * @param s * @return */ public static String reverseRecurive(String s) { int length = s.length(); int test = length / 2; if (length <= 1) return s; String left = s.substring(0, length / 2); String right = s.substring(length / 2, length); String afterReverse = reverseRecurive(right) + reverseRecurive(left); return afterReverse; } }

字符串反轉記錄總結