反转字符串

  反转字符串是我们经常会遇到的一种面试题,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

  

 

posted @ 2016-06-23 15:21  Flying_Boy  阅读(918)  评论(0编辑  收藏  举报