• 剑指offer 43.左旋转字符串


    43.左旋转字符串

    题目描述

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

    思路一:

    修正 n 的值后,让一个StingBuilder对象先后拼接 str 字符串中 n 之后的字符和 0 ~ n 之间的字符

     1 public class Solution {
     2     public String LeftRotateString(String str,int n) {
     3         if(str == null || str.length() == 0){
     4             return str;
     5         }
     6         // 修正 n 的值
     7         n %= str.length();
     8         // 将 0 - n - 1 为移到 n 为后面
     9         StringBuilder sb = new StringBuilder();
    10         sb.append(str.substring(n, str.length()));
    11         sb.append(str.substring(0, n));
    12         return sb.toString();
    13     }
    14 }

    简化写法

    1 class Solution {
    2     public String reverseLeftWords(String s, int n) {
    3         
    4         n = n % s.length();    
    5         // 分成两部分,一部分是前k个字符,另一部分是后半段字符
    6         return s.substring(n, s.length()) + s.substring(0, n);
    7     }
    8 }

    思路二:

    修正 n 的值之后,让 str 再加上 一个str, 之后返回新 str 的 (n ~ len + n)之间的字符串

     1 public class Solution {
     2     public String LeftRotateString(String str,int n) {
     3         if(str == null || str.length() == 0){
     4             return str;
     5         }
     6         // 修正 n 的值
     7         n %= str.length();
     8         int len = str.length();
     9         str += str;
    10         return str.substring(n, len + n);
    11     }
    12 }
  • 相关阅读:
    Linux网络编程必看书籍推荐
    SpringMVC DispatcherServlet初始化过程
    freemarker写select组件(五)
    hdu 1009 FatMouse' Trade
    新IOS编程语言 Swift 新编译器Xcode6
    NoSQL数据库:数据的一致性
    POJ 3041 Asteroids
    POJ 3342 Party at Hali-Bula (树形dp 树的最大独立集 判多解 好题)
    __repr__与__str__
    HDU 4950 Monster(公式)
  • 原文地址:https://www.cnblogs.com/hi3254014978/p/12628447.html
Copyright © 2020-2023  润新知