循环移位

来源:互联网 发布:上瘾网络剧秒拍视频 编辑:程序博客网 时间:2024/04/29 12:08


题目要求:

将字符串str进行循环移位,要求算法空间复杂度O(1),时间复杂度O(n)

思路:

假设str需要循环移位k位,则将其分为前后两部分,分别长k和n-k,称AB

则循环移位的过程即为XY->YX. 可由XT即转置完成,(XTYT)T=(YT)T(XT)T=YX

实现如下:

/* * Reverse_String.cpp * *  Created on: May 22, 2012 *      Author: Rachel */#include"stdio.h"#include"string.h"void Reverse(char* str, int s, int e){ char tmp; while (s < e) {  tmp = str[s];  str[s] = str[e];  str[e] = tmp;  s++;  e--; }}void RightReverse(char* str, int k, int n){ if (k > 0 && n > 0)//avoid exception {  Reverse(str, 0, k - 1);  Reverse(str, k, n - 1);  Reverse(str, 0, n - 1);  printf("%s\n", str); }}int main(){ char str[25]; int k, n; while (scanf("%s%d", str, &k) != EOF) {  n = strlen(str);  if (k > n)   k %= n;  RightReverse(str, k, n); }}


0 0
原创粉丝点击