字符串的旋转

转载 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)。

IT公司常见面试题 字符串旋转

  • 2012年04月18日 11:12
  • 3KB
  • 下载

旋转字符串;编程珠玑第二章;rotate a one-dimensional vector;循环移位数组;编程之美

一:问题描述: 编程珠玑第二章的第二个问题是字符串(或者理解为向量)旋转问题,具体描述如下: rotate a one-dimensional vector of n elements left...

判断字符串s2能否由s1旋转得到

* 判断s2能否由s1旋转得到 * 已知isSunString函数,但只能调用一次 * 思路:s1=xy; s2=yx;令s1=s1+s1=xyxy;则s2必为s1的子串...
  • dutsoft
  • dutsoft
  • 2014年05月20日 20:05
  • 830

左旋转字符串 C++实现

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

剑指offer之面试题42翻转单词顺序VS左旋转字符串

翻转单词顺序VS左旋转字符串
  • WSYW126
  • WSYW126
  • 2016年05月12日 18:22
  • 340

翻转句子中单词的顺序和字符串的旋转操作 c++面试题

/* 题目描述:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。 为简单起见,标点符号和普通字母一样处理。如:”I am a student.”翻转成”st...

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

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

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

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

剑指offer——左旋转字符串

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

cc150:判断是否为旋转字符串

假设你有一个isSubstring函数,可以检测一个字符串是否是另一个字符串的子串。 给出字符串s1和s2,只使用一次isSubstring就能判断s2是否是s1的旋转字符串, 请写出代码。旋转字符串...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:字符串的旋转
举报原因:
原因补充:

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