反转字符串
反转字符串是我们经常会遇到的一种面试题,Exp: 字符串 Hello 输出位 olleH
FUN1:看到要求的第一反应差不多是循环存储字节后倒叙输出。代码如下
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;实际上满足了先进先出的顺序,这和栈的特性相同,所以可以定义栈 对栈进行压栈 出栈的操作 代码如下
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:反转字符串实际上也是逆序遍历字符串 输出
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:反转字符串也就是从收尾两端依次交换到中间位置的过程,我们可以用递归的方法来实现 只需要 做到
- 找出递归结束的临界条件
- 对针对于临界条件的不同的值做出不同的处理
代码实现
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