字符串的旋转

转载 2015年07月07日 16:54:21

解法一:暴力移位
初看此题,可能最先想到的方法是将需要移动的字符一个一个地移动到字符串的尾部。
如果定义指向该字符串的一个指针s,然后设该字符串的长度为n,那么,可以先编写一个函数LeftShiftOne(char* s, int n),以完成将一个字符移动到字符串尾部的功能,然后再调用m次LeftShiftOne函数,使得字符串开头的m个字符移动到字符串的尾部。

这样,就完成了将若干个字符移动到尾部的要求。
下面,分析一下这种方法的时间复杂度和空间复杂度。针对长度为n的字符串来说,假设需要移动m个字符到字符串的尾部,那么总共需要 m×n 次操作。同时设立一个变量保存第一个字符,如此,时间复杂度为O(mn),空间复杂度为O(1)。



解法二:三次翻转
即把字符串先分为两个部分,再各自反转,最后整体反转的方法,时间复杂度为O(n),空间复杂度为O(1)。
编程之美:数组循环移位



解法三:
可以用带头尾指针的双向链表存储字符串用空间换时间,效率相当快平均下来O(n/2)。

相关文章推荐

剑指offer面试题[42]-反转单词顺序VS左旋转字符串

题目1: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”ab...

旋转字符串的三种算法

旋转字符串的三种算法

微软面试100题之26题:左旋转字符串

题目: 定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。 如把字符串abcdef 左旋转2 位得到字符串cdefab。请实现字符串左旋转的函数。 要求时间对长度为n 的字符串...

程序员编程艺术:第一章、左旋转字符串

第一章、左旋转字符串 作者:July,yansha。 时间:二零一一年四月十四日。 微博:http://weibo.com/julyweibo。 出处:http://blog....

字符串的旋转

题目描述给定一个字符串,要求将字符串的前若干(m)位字符移动到字符串的尾部。 **例如**:将字符串"abcdef"的前3个字符'a'、'b'和'c'移到字符串的尾部,得到"defabc"。 解法一:...

程序员面试题精选100题(21)-左旋转字符串

http://zhedahht.blog.163.com/blog/static/2541117420073993725873/ 题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到...

翻转单词顺序 VS 左旋转字符串43

题目一(翻转单词顺序):输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串”I am a student.”则输出”student....

字符串左旋右旋——三步旋转法和移相法

字符串左旋右旋——三步旋转法和移相法!(K个字符)

【剑指Offer学习】【面试题42:翻转单词顺序vs左旋转字符串】

题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内字啊的顺序不变。为简单起见,标点符号和普通字母一样处理。举例说明例如输入字符串”I am a student. ”,则输出”student. a...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)