您的位置:首页 > 职场人生

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

2015-09-09 15:04 288 查看
题目描述:

请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量),给定一个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”,可以两次反转,首先整体反转,然后再部分反转。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: