字符串反转是面试过程中出现频率较高的算法题,今天一个牛同事让我用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. !important使用

    IE 6.0一直都不支持这个语法,而其他的浏览器都支持.因此我们就可以利用这一点来分别 给IE和其他浏览器不同的样式定义,例如,我们定义这样一个样式: colortest {border:20px s ...

  2. java IO学习

    1.如何将byte[]转换为String byte byt[] = new byte[1024]; int b = file.read(byt); //b是byt的实际读取到的长度 String st ...

  3. IOS Core Animation Advanced Techniques的学习笔记(四)

    第五章:Transforms   Affine Transforms   CGAffineTransform是二维的     Creating a CGAffineTransform   主要有三种变 ...

  4. Storm进程通信机制

    storm的worker进程之间消息传递机制图: 每个worker都有一个独立的监听进程,监听配置文件中配置过的端口列表supervisor.slots.ports,topology.receiver ...

  5. HDU 1005 F(Contest #1)

    题意: 已知f[1] = f[2] = 1,输入三个数a,b,n,求f[n] = (a*f[n-1]+b*f[n-2])%7的结果 分析: f[n-1]和f[n-2]最多为7种情况(0,1,2,3,4 ...

  6. c语言问卷

    1.你对自己的未来有什么规划?做了哪些准备? 答:关于未来我想从事设计网页.做小游戏或者app的工作,因为是金融服务外包方向,也许也会进入银行或者证券公司管理银行系统.让英语更近一层,可进入外企工作. ...

  7. 思维导图MindManager的文件格式与例图

    思维导图软件很多,能够画出思维导图的软件更多.作为流传较广而又比较成熟的思维导图软件,MindManager有专门的文件格式.如果读者想多借鉴导图,就应该了解MindManager的文件格式. Min ...

  8. jquery checkbox实例

    <!DOCTYPE html><html> <head><meta charset="utf-8" /><title>& ...

  9. 存到cookie里能提高性能吗?

    今天刚刚看了篇微信,大体意思是说g哥之类的网站把很多存session的东西都放cookie里了,可减少服务器的负担种种.然后我就发现我对request到application的记忆有些模糊了,哪些是在 ...

  10. iOS学习之判断是否有网络的方法

    在实际开发中, 会有这样一个需求: 用户在有网的状态下会直接从网络请求数据, 在没网的情况下直接从本地读取数据. 下边的方法可以判断是否有网络. - (BOOL)connectedToNetwork ...