zoukankan      html  css  js  c++  java
  • 数据结构与算法面试题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;
    }
  • 相关阅读:
    .Net并行编程
    ShopEx4.8.5.55328破解版
    PLinq
    C# 4.0 Parallel
    WCF、Web API、WCF REST、Web Service
    WCF 采用net.tcp协议
    MVC 过滤器3
    go orcale
    获取合并单元格中值的一个方法POI
    发起、维持和发展以利润为导向的企业的有目的性的行为(转)
  • 原文地址:https://www.cnblogs.com/wabi87547568/p/5272382.html
Copyright © 2011-2022 走看看