将N个字符的数组,循环右移K位。时间复杂度O(N)。

来源:互联网 发布:retrofit 传json 编辑:程序博客网 时间:2024/05/01 08:32

将N个字符的数组,循环右移K位。时间复杂度O(N)
eg:str[]=”abcde123”,右移3位
1、旋转abcde->edcba
2、旋转123->321
3、整体旋转edcba321->123abcde

代码块实现

void Reverse(char* str, int left,int right){    while (left < right)    {        std::swap(str[left], str[right]);        ++left;        --right;    }}//这里是循环右移K位,循环左移K位是同样的道理 void RightMoveK(char* str,int size,int k){    assert(str);    k = k % size;//(这一步非常关键)因为右移size长度又回到了原来的字符串    //翻转前K个字符    Reverse(str, 0, size - k - 1);    //翻转后面的剩余字符    Reverse(str, size - k, size - 1);    //在进行整体翻转    Reverse(str, 0, size - 1);}void RightMoveTest(){    char str[] = "abcde123";    int len = strlen(str);    cout << "原str:         "<<str << endl;    RightMoveK(str, len, 6);    cout << "右移K位的str:  " << str << endl;}

结果展示

这里写图片描述

阅读全文
0 0