给定一个字符串,对其移动,向左或者 向右移动x位置。
这类题对于我们最初学习c语言就是一个典型题。
大概思路:
1。循环x次,每次执行一步左移或右移。时间复杂度O(m*n)。
进一步优化:
三步反转法---时间复杂度O(n)。
具体思路:
(1)。若左移3位,则将其分为X(1~3),Y(3~n)两部分。
(2)。将两部分分别反转。
(3)。 将整体反转。
例 abcdef 左移3位。
X abc Y def
X cba Y fed
XY defabc
下面代码照网上学的:
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
using namespace std;
void reverse(char *left,char *right) //反转
{
while(left<right)
{
char temp=*left;
*left=*right;
*right=temp;
right--;
left++;
}
}
void Leftmove(char *s,int m) //三次反转
{
int len=strlen(s);
m%=len;
reverse(s,s+len-1);
reverse(s,s+len-m-1);
reverse(s+len-m,s+len-1);
}
int main()
{
char str[100];
gets(str);
int k;
cin>>k; // 左移k位
Leftmove(str,k);
puts(str);
}