zoukankan      html  css  js  c++  java
  • 剑指offer(42):左旋转字符串

    题目描述

    汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
    思路:使用C++ string内置函数substr函数可得到子串,或者java的substring函数,但是该方法太过简单,没有涉及到算法问题
    class Solution {
    public:
        string LeftRotateString(string str, int n) {
            if(n>str.length()) return "";
            string sub = str.substr(0,n);
            string suf = str.substr(n);
            return suf.append(sub);
        }
    };
    public class Solution {
        public String LeftRotateString(String str,int n) {
            if(n>str.length()) return "";
            String sub = str.substring(0,n);
            String suf = str.substring(n);
            return suf+sub;
        }
    }

     按照剑指offer书上的做法:三次翻转字符串

    class Solution {
    public:
        string LeftRotateString(string str, int n) {
            if(n==0||str.length() == 0) return str;
            reverse(str,0,n-1);
            reverse(str,n,str.length()-1);
            reverse(str,0,str.length()-1);
            return str;
        }
        void reverse(string &str,int begin,int end){
            for(int i=begin,j=end;i<=(end + begin)/2;i++,j--){
                swap(str[i], str[j]);
            }
        }
    };

    要注意两种特殊情况:n=0的时候,返回原字符串;length==0,返回原字符串

  • 相关阅读:
    Elasticsearch核心技术与实战-学习笔记
    在ABP中灵活使用AutoMapper
    使用log4net记录ABP日志
    Abp小知识-如何全局设置DontWrapResult属性
    《C#并发编程经典实例》学习笔记—2.7 避免上下文延续
    NEST 6.X升级到7.X
    django框架——十
    django——自定义分页
    django框架九
    orm数据库查询优化和数据库三大设计范式
  • 原文地址:https://www.cnblogs.com/ttzz/p/13708686.html
Copyright © 2011-2022 走看看