字符串反转C#的实现
字符串反转是面试过程中出现频率较高的算法题,今天一个牛同事让我用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#的实现的更多相关文章
- Java算法之字符串反转分析
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 在基本的工作内容开发中,算法不会显得那么重要,而在百万级别的时候,差距非常大,今天带大家研究下常见的 ...
- 字符串反转----将this is good 转化为good is this 输出。
思路:现将整个字符串反转,再将每个单词反转: #include "iostream" #include "cstring" using namespace st ...
- 趣味算法:字符串反转的N种方法(转)
老赵在反对北大青鸟的随笔中提到了数组反转.这的确是一道非常基础的算法题,然而也是一道很不平常的算法题(也许所有的算法深究下去都会很不平常).因为我写着写着,就写出来8种方法……现在我们以字符串的反转为 ...
- Java实现字符串反转的8种方法
/** * */ package com.wsheng.aggregator.algorithm.string; import java.util.Stack; /** * 8 种字符串反转的方法, ...
- 使用SQL字符串反转函数REVERSE巧妙实现lastindexof功能
要实现一个简单的业务: 使用SQL脚本获取字符串'large/020700/61970b0101.jpg' 中的'61970b0101.jpg'部分. 先想到的是C#中的lastindexof,但是S ...
- 字符串反转实现(C++)
字符串反转 C++实现,不使用系统函数: // ReverseString.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include ...
- Java实现字符串反转
替换原则:index k 的值和 n-k 的值进行交换.(始终记住程序员的n.k都是字符串的实际位置.) 乘除的最基本实现还是来源于移位操作. public String reverse(String ...
- java几种字符串反转
java实现的字符串翻转,能想到的这几种方法 假设有其它方法,欢迎交流 //字符串反转 public class ReverseString { public String reverse1(Stri ...
- 有意思的字符串反转(JavaScript)
有意思的字符串反转 如果问你,实现对一串字符串进行反转操作,你的第一反应的方法是? 第一个我想到的是,利用Array.Reverse来实现: var test = 'Skylor.min'; test ...
随机推荐
- 判断整数是否能被n整除
(1)1与0的特性: 1是任何整数的约数,即对于任何整数a,总有1|a. 0是任何非零整数的倍数,a≠0,a为整数,则a|0. (2)若一个整数的末位是0.2.4.6或 ...
- blade and soul zone overview
The world of Blade and Soul, is a vast extension of land containing two continents (the Southern Con ...
- 多项目开发下的dll文件管理
阅读目录: DS01:为什么要对生成的dll文件进行管理? DS02:首先介绍以下两个DOS命令 DS03:第一种实现方法(xcopy) DS04:第二种实现方法(attrib) DS05:分享一个有 ...
- IOS开发之画图形
1 画线 2 画线第二个方法 相对方法1简洁 3 矩形 4 圆 5 弧线 6画文字(略) 7 画图片(略)
- Fastest Wordpress Theme -wpfast Download
Are you in search of fastest wordpress theme to increase your product sell and conversion ,then you ...
- python时间格式化
import timeprint time.time()输出的结果是:1279578704.6725271 但是这样是一连串的数字不是我们想要的结果,我们可以利用time模块的格式化时间的方法来处理: ...
- nginx 目录文件列表功能配置
工作中常常有写不能有网页下载东西的需求,在Apache下搭建完成后直接导入文件即可达到下载/显示文件的效果,而Nginx也可以满足这样的需求(nginx 目录列表功能默认是关闭的),这时就需要配置. ...
- Android studio打开之后 cannot load project: java.lang.NUllpointerException
参考来源:http://bbs.csdn.net/topics/391014393 关闭网络,重新打开Android studio就好了.(但是原因不清楚是为什么?) Internal error. ...
- 关于springMVC3.0基于注解方式的项目搭建
前言:开发了几个月的AS3项目,感觉JAVA都用不太熟练了.刚好这几个抽的空,就把自己以前用过的Spring框架再搭一边, 并完整的记录下来 开发环境:tomcat + mysql+ java 1.所 ...
- 【PHP】分页条函数封装
这两天在学习PHP 想做一个前端后台都包含的网站 看了一些视频发现大牛们都是将封装起来实现代码的重用性 本人技拙也写了个分页条函数的封装 分页条在用PHP网站开发中十分常用 通过封装代码来提高网站开发 ...