《程序员面试金典》--反转字符串

题目描述:
请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量),给定一个string iniString,请返回一个string,为翻转后的字符串。保证字符串的长度小于等于5000。
测试样例:
"This is nowcoder"返回:"redocwon si sihT"

题目分析:

    这道题目难度不是很大,首先可能会想到,重现建立一个字符串数组,然后遍历字符串,把字符反方向放进字符串数组中,这样实现可以,但是需要O(N)的空间复杂度。

    可以在同一个字符串上实现反转,头尾的字符互换位置,这样只需要O(1)的时间复杂度,在写程序的时候要注意边界条件,对应的位置是否正确,代码实现如下:

代码:

string reverseString(string iniString) {
	int size=iniString.size();
  	int beg=0;
 	 --size;
 	 while(beg<size)
 	 {
   		char ch=iniString[beg];
   		iniString[beg]=iniString[size];
   		iniString[size]=ch;
   		++beg;
   		--size;
  	}
  	return iniString;
}
扩展:

     如果要实现字符串的分段反转,比如“you love i”反转成“i love you”,可以两次反转,首先整体反转,然后再部分反转。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值