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

  • 相关阅读:
    java进阶(36)--IO和Properties联合使用(配置文件)
    java进阶(34)--File类、目录复制
    java进阶(33)--IO流
    java进阶(32)--Collections工具类
    java进阶(31)--TreeSet集合、TreeMap集合、自平衡二叉树
    解决Excel打开空白或慢的问题
    CCS
    CCS
    CCS
    CCS
  • 原文地址:https://www.cnblogs.com/ttzz/p/13708686.html
Copyright © 2011-2022 走看看