zoukankan      html  css  js  c++  java
  • 面试题58_2:左旋转字符串

    1 题目描述

      汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!

    2 输入

    abcXYZdef 3

    3 输出

    XYZdefabc

    4 样例输入

    “abcXYZdef”, 3
    

    5 样例输出

    “XYZdefabc”
    

    6 求解思路

      和上一题很像,两次翻转字符串,第一次翻转整个串,第二次翻转间隔的两个串

    7 C++版本代码如下

    class Solution {
    public:
        void Reverse(string &str, int begin, int end){
            if(str.length() < 1 || begin == end)
                return ;
    
            while(begin < end){
                char temp = str[end];
                str[end] = str[begin];
                str[begin] = temp;
                begin++;
                end--;
            }
        }
    
        string LeftRotateString(string str, int n) {
            int length = str.size();
            if(length < 1 || n > length || n < 1)
                return str;
    
            int begin = 0;
            int end = length - 1;
            // 先翻转整个串
            Reverse(str, begin, end);
            // 翻转内部
            Reverse(str, begin, length - n - 1);
            Reverse(str, length - n, end);
            return str;
        }
    };
    
  • 相关阅读:
    oracle中文显示为问号
    oracle 11g 安装报错(agent_nmhs)
    yum源配置
    ora-00020
    mysql停止正在执行的SQL语句
    linux root用户被锁定
    MySQL8.0 根据ibd文件恢复表结构
    mysql 8.x 开启远程访问和修改root密码、
    个人博客迁移到github
    postman断言方式
  • 原文地址:https://www.cnblogs.com/flyingrun/p/13557893.html
Copyright © 2011-2022 走看看