字符串反转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 ...
随机推荐
- ElasticSearch集群配置
因机器有限,本文只做单机3个节点的集群测试. 1.集群测试信息 elasticsearch版本:elasticsearch-2.4.1 windowns版本:win10 2.解压elasticsear ...
- laravel composer 指定版本
composer create-project laravel/laravel=5.2.* --prefer-dist
- RP4412开发板烧写Ubuntu12.04失败原因分析解决
Ubuntu烧写失败可能是卡的问题 问:用RP4412开发板,卡烧了光盘中的fastboot失败,现在如何补救呢? 答:INAND格式化,利用usb来升级啊. 也有文档,看升级文档. 问:这个是怎么回 ...
- Hibernate实体关系映射(OneToMany、ManyToOne双边)——完整实例
双边关系是最常见的配置.在多方有一方的引用,一方也有多方的引用.双边关系能够很方便地查询数据.看一个班级与学生的双边关系. 班级(Clazz类)与学生(Student类):一对多关系.班级中有学生属性 ...
- Coding源码学习第二部分(FunctionIntroManager.m)
接上篇.上篇有一个细节忘了写,在Coding_iOS-Info.plist 里面添加了一个key 是 Status bar is initially hidden Value 是 YES,在appl ...
- centos下在线安装mysql
1 首先查看是否有安装过,如果已经安装过,就不必再安装了 yum list installed mysql* rpm -qa | grep mysql* 2 查看有没有安装包: yum list my ...
- i7 4790 z97-ar ssd 固态硬盘 装机的一些经历
今天电脑终于装好了,我于七夕情人节前后的几天配了一台台式机用开发,期间遇到了一些问题与大家分享一下,希望对一些朋友有帮助. 1 买HIMD线,各个零件全部组装好后,我意识到一个问题没买HIMD线,我的 ...
- jQuery中animate的height的自适应
可以用 animate() 方法几乎可以操作大部分CSS 属性,但其属性的值不能为字符串,很多人都遇到过这个问题. 例如:获取一个元素自适应时的高,但el.animate({height:‘aut ...
- linux 内核学习之八 进程调度过程分析
一 关于进程的补充 进程调度的时机 中断处理过程(包括时钟中断.I/O中断.系统调用和异常)中,直接调用schedule(),或者返回用户态时根据need_resched标记调用schedule() ...
- java数据结构_笔记(5)_图的算法
图的算法 1 图的遍历图的遍历就是从图中某个顶点出发,按某种方法对图中所有顶点访问且仅访问一次.遍历算法是求解图的连通性问题.拓扑排序和求关键路径等算法的基础. 2 深度优先遍历从图中某个顶点V 出发 ...