• IT公司100题-26-左旋转字符串


    问题描述:
    给定字符串和左旋的字符数,写程序实现字符串的左旋操作。例如对于字符串”12345678″, 左旋转4个字符后,变成”56781234″。要求时间复杂度为O(n),空间复杂度O(1)。
     
    分析:
    假设字符串表示为XY,X表示需要左旋的部分,左旋后字符串表示为YX。
    根据公式:1
     

    代码实现:

     1 // 26.cc
     2 #include <iostream>
     3 #include <string>
     4 #include <cstring>
     5 using namespace std;
     6 
     7 // 反转字符串
     8 void reverse_str(char* start, char* end) {
     9     if (!start || !end)
    10         return;
    11     while (start < end) {
    12         swap(*start, *end);
    13         start++;
    14         end--;
    15     }
    16 }
    17 
    18 // 左移k个字符
    19 void left_rotate_str(char*& str, size_t k) {
    20     if (!str || k <= 0)
    21         return;
    22 
    23     size_t n = strlen(str);
    24     k = k % n;
    25     
    26     reverse_str(str, str + k - 1);
    27     reverse_str(str + k, str + n - 1);
    28     reverse_str(str, str + n - 1);
    29 }
    30 
    31 int main() {
    32     cout << "input a str:" << endl;
    33 
    34     string s;
    35     getline(cin, s);
    36 
    37     char* str = new char[s.size() + 1];
    38     strcpy(str, s.c_str());
    39     int k = 5 < s.size() ? 5 : 0;
    40     left_rotate_str(str, k);
    41 
    42     cout << "after left rotate " << k << " chars:" << endl << str << endl;
    43     return 0;
    44 }

    输出:

    $ ./a.exe
    input a str:
    12345678
    after left rotate 5 chars:
    67812345
  • 相关阅读:
    jq绑定事件
    NReco.PdfGenerator HtmlToPdfConverter 使用示例(未完成)
    msbuild 简单命令
    python 文件操作
    OpenXml demo
    js 常见代码
    C# 静态变量、静态函数、实体变量、实体函数在一个类中的执行顺序
    线程相关技术
    css 光标
    ECMAScript面向对象(二)——之创建对象方法总结
  • 原文地址:https://www.cnblogs.com/dracohan/p/3927548.html
Copyright © 2020-2023  润新知