美文网首页
8. 旋转字符串

8. 旋转字符串

作者: 6默默Welsh | 来源:发表于2018-03-13 11:40 被阅读23次

    描述

    给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转)

    样例

    对于字符串 "abcdefg".

    offset=0 => "abcdefg"
    offset=1 => "gabcdef"
    offset=2 => "fgabcde"
    offset=3 => "efgabcd"
    

    挑战

    在数组上原地旋转,使用O(1)的额外空间

    思路

    三步翻转法,即对原字符串进行下列操作通过 offset 确定分割位置,然后将两段分别翻转,然后再将字符串整体翻转

    代码

    public class Solution {
        /**
         * @param str: an array of char
         * @param offset: an integer
         * @return: nothing
         */
        public void rotateString(char[] str, int offset) {
            if (str == null || str.length == 0) {
                return;
            }
            
            // 此处取模不可省略    
            offset = offset % str.length;
            reverse(str, 0, str.length - offset - 1);
            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;
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:8. 旋转字符串

          本文链接:https://www.haomeiwen.com/subject/xotzfftx.html