Lintcode 8. 旋转字符串

描述

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

样例

对于字符串 "abcdefg".

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

挑战

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

 

 

2、难点分析

特殊情况:①字符串为""的情况②offset=0的情况③offset远大于字符串长度的情况

前两种情况,如果想到了直接return就好。

char temp;
        if(offset==0) return;
        if(str.length==0)return;

考虑特殊情况,还可以考虑小于一的条件

 if (str == null || str.length <=1)
        {
            return;
        }

将字符串挪移

 int len=str.length;
        for(int i=1;i<=offset%len;i++){
            temp=str[len-1];
            int j=len-2;
            while(j>=0){
                str[j+1]=str[j];
                j--;
            }
            str[0]=temp;

如果offset过长就%len为移动的次数

先将最后一位数赋给temp,然后将每一位向后赋值。最后将temp值赋给第一个数。

 

 

完整代码为

public class Solution {
    /**
     * @param str: an array of char
     * @param offset: an integer
     * @return: nothing
     */
     
     //没有考虑字符串为""的情况
     //没有考虑到offset远大于字符串长度的情况,导致时间超时
    public void rotateString(char[] str, int offset) {
        // write your code here
        char temp;
        if(offset==0) return;
        if(str.length==0)return;
        int len=str.length;
        for(int i=1;i<=offset%len;i++){
            temp=str[len-1];
            int j=len-2;
            while(j>=0){
                str[j+1]=str[j];
                j--;
            }
            str[0]=temp;
        }
    }
}

 

 

posted @ 2018-09-20 18:01  一叶知秋06  阅读(193)  评论(0编辑  收藏  举报