字符串反转是面试过程中出现频率较高的算法题,今天一个牛同事让我用C#帮他实现这个算法,前提当然是不能使用类库。

例如: how are you 的反转结果为 you are how.

算法1: 是我当场写的一个不太理想的算法,虽然不太理想,但思路很直接:

1. 申请一个新的字符数组,新字符数组大小与源字符串等长度。

2. 将源字符串从末尾向前端进行遍历。将每一个单词加入新字符数组。

使用变量count记录当前单词长度。即,

若字符非空格,count++;

若字符是空格,则将原数组从当前位置开始的count个字符加入到新数组中。

        static void Main(string[] args)
{
string testString = "how are you"; var result = reverseString(testString); } static char[] reverseString(string value)
{ if (string.IsNullOrEmpty(value))
return new char[] { }; int length = value.Length;
char[] result = new char[length];
int count = ;
int rIndex = ;
for (int i = length-; i>=; i--)
{
if(value[i]!=' ')
{ count++; } if(value[i]==' ')
{
int index = i + ;
for(; index< i+count+; index++)
{
result[rIndex++] = value[index];
}
count = ;
result[rIndex++] = ' ';
} } // fot the first word
foreach (char c in value)
{
if (c != ' ')
result[rIndex++] = c;
else
break;
} return result;
} }

算法2: 今天下班前,又花了1个小时重新考虑了这个问题,其实要实现空间开销最小,时间复杂度最低,可以实现一个字符数组反转程序。 思路如下:

1. 先将整个元字符数组反转, 得到 uoy era woh.

2. 再将每个单词进行反转, 同样使用空字符分割单词。

注意:字符数组反转函数,1. 不需要遍历所有字符,仅仅遍历二分之一的字符即可。 2. 用left, right控制字符数组中反转字符的起始位置。

namespace reverseWords
{
/// <summary>
/// Qijie Xue
/// </summary>
class Program
{
static void Main(string[] args)
{
string testData = "how are you now";
var result = reverseString2(testData);
} static char[] reverseString2(string value)
{
char[] ochr = value.Trim().ToString().ToArray();
ochr = reverseChar(ref ochr, , ochr.Length - ); int start = ;
int end = ;
for(int i = ; i<ochr.Length; i++)
{
if(ochr[i]==' ')
{
end = i - ;
reverseChar(ref ochr, start, end);
start = i + ;
} if(i==ochr.Length - )
{
end = ochr.Length - ;
reverseChar(ref ochr, start, end);
}
} return ochr;
} static char[] reverseChar(ref char[] ochr, int left, int right)
{
int mid = (right + left) >> ; int l = ;
int r = ; //even numbers, l = mid, r = mid + 1
//odd numbers, l = mid - 1, r = mid + 1
if ((right - left + ) % == )
{
l = mid + ;
r = mid;
}
else
{
l = r = mid;
} while (l > left)
{
l--;
r++;
char tchr = ochr[l];
ochr[l] = ochr[r];
ochr[r] = tchr;
} return ochr;
} }
}

以上两种算法,都需要将源字符串两端的空字符去掉。

字符串反转C#的实现的更多相关文章

  1. Java算法之字符串反转分析

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 在基本的工作内容开发中,算法不会显得那么重要,而在百万级别的时候,差距非常大,今天带大家研究下常见的 ...

  2. 字符串反转----将this is good 转化为good is this 输出。

    思路:现将整个字符串反转,再将每个单词反转: #include "iostream" #include "cstring" using namespace st ...

  3. 趣味算法:字符串反转的N种方法(转)

    老赵在反对北大青鸟的随笔中提到了数组反转.这的确是一道非常基础的算法题,然而也是一道很不平常的算法题(也许所有的算法深究下去都会很不平常).因为我写着写着,就写出来8种方法……现在我们以字符串的反转为 ...

  4. Java实现字符串反转的8种方法

    /** * */ package com.wsheng.aggregator.algorithm.string; import java.util.Stack; /** * 8 种字符串反转的方法, ...

  5. 使用SQL字符串反转函数REVERSE巧妙实现lastindexof功能

    要实现一个简单的业务: 使用SQL脚本获取字符串'large/020700/61970b0101.jpg' 中的'61970b0101.jpg'部分. 先想到的是C#中的lastindexof,但是S ...

  6. 字符串反转实现(C++)

    字符串反转 C++实现,不使用系统函数: // ReverseString.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include ...

  7. Java实现字符串反转

    替换原则:index k 的值和 n-k 的值进行交换.(始终记住程序员的n.k都是字符串的实际位置.) 乘除的最基本实现还是来源于移位操作. public String reverse(String ...

  8. java几种字符串反转

    java实现的字符串翻转,能想到的这几种方法 假设有其它方法,欢迎交流 //字符串反转 public class ReverseString { public String reverse1(Stri ...

  9. 有意思的字符串反转(JavaScript)

    有意思的字符串反转 如果问你,实现对一串字符串进行反转操作,你的第一反应的方法是? 第一个我想到的是,利用Array.Reverse来实现: var test = 'Skylor.min'; test ...

随机推荐

  1. sed 使用

    Sed简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内 ...

  2. hibernate入门实例

    1. 环境配置 1.1 hiberante环境配置 hibernate可实现面向对象的数据存储.hibernate的官网:http://hibernate.org/ 官网上选择hibernate OR ...

  3. python之路:Day8-Socket编程进阶

    本节内容: 1.Socket语法及相 2.SocketServer实现多并发 Socket语法及相关    socket概念 socket本质上就是在两台网络互通的电脑之间,建立一个通道,两台电脑通过 ...

  4. 手机升级到iOS10,用Xcode7.3进行真机调试方法

    今天发布的正式版的iOS10,手机果断升级了,结果发现Xcode7.3不能真机调试了,原因是Xcode7.3里面没有iOS10的sdk,下面这个压缩包你可以下载下来放在你的Xcode7.3里面,当然了 ...

  5. 2014中国黑客榜(beta版)

    黑客,英文hacker.精通计算机各类技术的计算机高手,泛指擅长IT技术的人群.计算机科学家. 最近受某机构所托搜集国内活跃黑客近况.本着客观专业,权威可信的原则参考了国内从00年到最新的黑客榜单,以 ...

  6. Android中dp,px,sp概念梳理以及如何做到屏幕适配

    http://blog.csdn.net/jiangwei0910410003/article/details/40509571

  7. sublime简书安装配置

    sublime-text3编辑器 安装 sudo add-apt-repository ppa:webupd8team/sublime-text-3 sudo apt-get update sudo ...

  8. nginx 安装与配置

    centos7环境下nginx的安装  版本 0.85 tar zxvf nginx.tar.gz cd nginx ./configure // ./configure --help 查看编译选项 ...

  9. NOIP2016之反面教材提供

    NOIP 2016信息竞赛总结 竞赛历程总结: 算下来一共学了11个月的信息竞赛,从最初进来的时候大概会一点最最基础的语法,上课什么也听不懂,然后一直追进度,我想在这个阶段中我的问题主要是自己知道自己 ...

  10. C# dll加载,抽象方法的使用

    抽象类! dll的使用 /// <summary> /// 返回类型--插件 /// </summary> /// <param name="baseName& ...