码迷,mamicode.com
首页 > 编程语言 > 详细

数据结构与算法面试题80道(26)

时间:2016-03-13 17:38:54      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:

6.左旋转字符串

 

题目:

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

 

如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。

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

 

将abcdefg的前三个左旋。先abcdefg->defabcg->defgbca(时间为n-3)

将问题转换为将bca的前一个左旋。先bca->acb(时间为1)

将问题转换为将cb的前一个左旋。cb->bc(时间为1)

所有时间复杂度为0(n).

所有的问题都是字母两两交换,辅助内存为O(1).

 

#include<iostream>
#include<cstring>
using namespace std;
char str[]="abcdefghij";

void leftRotateString(int left,int right,int n){
    int temp=right-left;

    for(int i=left+n;i<right;i++){
        char c=str[i];
        str[i]=str[i-n];
        str[i-n]=c;
    }
    //输出看看结果
    for(int i=0;i<right;i++) cout<<str[i];cout<<endl;
    if(temp%n==0) return ;
    else{
        left=right-n;
        n=n-temp%n;
        leftRotateString(left,right,n);
    }


}

int main(){
    int n=7;
    leftRotateString(0,strlen(str),n);

    return 0;
}

 

数据结构与算法面试题80道(26)

标签:

原文地址:http://www.cnblogs.com/wabi87547568/p/5272382.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!