左旋转字符串

题目:定义字符串的左旋转操作,把字符串前面的若干个字符移动到字符串的尾部。

要求:对长度为n的字符串操作的时间复杂度为O(n),辅助内存为O(1)。

举例:把字符串abcdef左旋转2位得到字符串cdefab。

答:

#include "stdafx.h"
#include <iostream>

using namespace std;

void swap(char *str, int begin, int end)
{
    char ch;
    while (begin < end)
    {
        ch = *(str + begin);
        *(str + begin) = *(str + end);
        *(str + end) = ch;
        begin++;
        end--;
    }
}

void Rotate(char *str, int length ,int m)
{
    if (NULL == str || length == 1)
    {
        return;
    }
    swap(str, 0, m - 1);
    swap(str, m, length - 1);
    swap(str, 0, length - 1);
}


int _tmain(int argc, _TCHAR* argv[])
{
    char chArr[] = "abcdef";
    char *p = chArr;
    cout<<p<<endl;
    Rotate(p, strlen(chArr), 2);
    cout<<p<<endl;
    return 0;
}

运行界面如下:

posted @ 2012-08-25 13:18  venow  阅读(3169)  评论(2编辑  收藏  举报