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


    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;
    }
  • 相关阅读:
    古人诗词之王安石
    关于周期函数的命题
    Strum—Lioville问题
    计算反常积分
    【面积原理】计算级数和
    【洛谷P6046】纯粹容器
    【洛谷P3631】方格染色
    【牛客挑战赛48 E】速度即转发
    【CF103D】Time to Raid Cowavans
    【洛谷P4280】逆序对
  • 原文地址:https://www.cnblogs.com/wabi87547568/p/5272382.html
Copyright © 2020-2023  润新知