《程序员面试金典》--反转字符串
2015-09-09 15:04
288 查看
题目描述:
请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量),给定一个string iniString,请返回一个string,为翻转后的字符串。保证字符串的长度小于等于5000。
测试样例:
"This is nowcoder"返回:"redocwon si sihT"
题目分析:
这道题目难度不是很大,首先可能会想到,重现建立一个字符串数组,然后遍历字符串,把字符反方向放进字符串数组中,这样实现可以,但是需要O(N)的空间复杂度。
可以在同一个字符串上实现反转,头尾的字符互换位置,这样只需要O(1)的时间复杂度,在写程序的时候要注意边界条件,对应的位置是否正确,代码实现如下:
代码:
如果要实现字符串的分段反转,比如“you love i”反转成“i love you”,可以两次反转,首先整体反转,然后再部分反转。
请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量),给定一个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”,可以两次反转,首先整体反转,然后再部分反转。
相关文章推荐
- SQL数据库面试题以及答案
- 面试题41和为S的两个数字VS和为s的连续正数序列
- 面试题 23
- 像程序员一样思考 记录
- 黑马程序员———Objctive-C———【NSDictionary、NSMutableDictionary、NSFileManager】
- 黑马程序员———Objctive-C———【NSArray不可变数组、NSMutableArray可变数组】
- 黑马程序员———Objctive-C———【NSString及NSMutalbeString的使用】
- 【剑指offer】面试题7:用两个栈实现队列
- 【剑指offer】面试题6:重建二叉树
- 【剑指offer】面试题5:从尾到头打印链表
- 黑马程序员——线程间的通讯
- iOS面试专题
- 安卓面试宝典
- 面试题初级-求字符串最后一个单词的长度和判断ip地址的合法性
- 2015-9-8号两次前端面试(大众点评+七牛)
- Java面试题
- 黑马程序员-- 集合框架 (Collection, Iterator,泛型)
- 剑指Offer:面试题4 替换空格
- 给“夜猫子”程序员的科学熬夜指南
- 黑马程序员--抽象类和接口