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; } } }