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,返回原字符串

  • 相关阅读:
    css float
    java基础77
    java基础75
    java基础73
    java基础72
    java基础71
    java基础630
    django-模版学习
    Django--- 网页显示时间
    创建一个django项目
  • 原文地址:https://www.cnblogs.com/ttzz/p/13708686.html
Copyright © 2011-2022 走看看