反轉字符串

  反轉字符串是咱們常常會遇到的一種面試題,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遞歸

相關文章
相關標籤/搜索