zoukankan      html  css  js  c++  java
  • lintcode8

    Given a string and an offset, rotate string by offset. (rotate from left to right)
    Example
    Given "abcdefg".
    offset=0 => "abcdefg"
    offset=1 => "gabcdef"
    offset=2 => "fgabcde"
    offset=3 => "efgabcd"
    Challenge
    Rotate in-place with O(1) extra memory.
     
    三步反转法。
    如果点a是length -1 - offset那个index,反转[0, a],反转[a+1, end],反转[0,end]
     
    细节:
    一开始对offset做一个offset = offset % length的处理,可以避免算index越界。 
     
     
    我的实现
    public class Solution {
        /**
         * @param str: An array of char
         * @param offset: An integer
         * @return: nothing
         */
        public void rotateString(char[] str, int offset) {
            // write your code here
            if (str == null || str.length == 0) {
                return;
            }
            offset = offset % str.length;
            reverse(str, 0, str.length - 1 - offset);
            reverse(str, str.length - offset, str.length - 1);
            reverse(str, 0, str.length - 1);
        }
        
        private void reverse(char[] str, int start, int end) {
            for (int i = start, j = end; i < j; i++, j--) {
                char temp = str[i];
                str[i] = str[j];
                str[j] = temp;
            }
        }
    }
  • 相关阅读:
    dart中Map类型详解
    洛谷P1582 倒水(二进制)
    maven依赖 临时转阿里云镜像
    java jdbc 连接数据库
    java 常用类
    java 异常处理
    java 对象 this static 封装
    java 面对对象 内存分析
    团队开发 git
    java 代码块
  • 原文地址:https://www.cnblogs.com/jasminemzy/p/9452694.html
Copyright © 2011-2022 走看看