反轉字符串是咱們常常會遇到的一種面試題,Exp: 字符串 Hello 輸出位 olleH面試
FUN1:看到要求的第一反應差很少是循環存儲字節後倒敘輸出。代碼以下oop
public static string StrReverseWithArray(string str) { if (string.IsNullOrEmpty(str)) return str; int length = str.Length; char[] array = str.ToCharArray(); for (int i = 0; i < length; i++) { array[i] = str[length - 1 - i]; } return new string(array); }
FUN2:分析下 input順序:H-e-l-l-o outPut順序是 o-l-l-e-H;實際上知足了先進先出的順序,這和棧的特性相同,因此能夠定義棧 對棧進行壓棧 出棧的操做 代碼以下ui
public static String StrReverseWithStack(String str) { if (string.IsNullOrEmpty(str)) return str; var stringStack = new Stack<char>(); char[] array = str.ToCharArray(); foreach (char t in array) { stringStack.Push(t); } int length = str.Length; for (int i = 0; i < length; i++) { array[i] = stringStack.Pop(); } return new string(array); }
FUN3:反轉字符串實際上也是逆序遍歷字符串 輸出spa
public static string StrReverseWithReverseLoop(String str) { if (string.IsNullOrEmpty(str)) return str; var sb = new StringBuilder(); for (int i = str.Length - 1; i >= 0; i--) { sb.Append(str[i]); } return sb.ToString(); }
FUN4:反轉字符串也就是從收尾兩端依次交換到中間位置的過程,咱們能夠用遞歸的方法來實現 只須要 作到code
代碼實現 blog
public static String StrReverseWithRecursive(String str) { if (string.IsNullOrEmpty(str)) return str; int length = str.Length; if (length == 1) { return str; } else { return StrReverseWithRecursive(str.Substring(1)) + str[0]; } }
OK遞歸