您的位置:首页 > 其它

字符串的旋转

2015-07-07 16:54 302 查看
解法一:暴力移位

初看此题,可能最先想到的方法是将需要移动的字符一个一个地移动到字符串的尾部。

如果定义指向该字符串的一个指针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)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: