LintCode001:旋转字符串

8. 旋转字符串

 

给定一个字符串(以字符数组的形式给出)和一个偏移量,根据偏移量原地旋转字符串(从左向右旋转)

样例

样例  1:
	输入:  str="abcdefg", offset = 3
	输出: "efgabcd"
	
	样例解释: 
	返回旋转后的字符串。

样例 2:
	输入: str="abcdefg", offset = 0
	输出: "abcdefg"
	
	样例解释: 
	返回旋转后的字符串

样例 3:
	输入: str="abcdefg", offset = 1
	输出: "gabcdef"
	
	样例解释: 
	返回旋转后的字符串

样例 4:
	输入: str="abcdefg", offset =2
	输出:"fgabcde"
	
	样例解释: 
	返回旋转后的字符串

挑战

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

注意事项

offset >= 0

 

解答

代码

  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;
	        }
	        System.out.println(str);
	    }

思路

一个char数组,一个偏移量.要移动char数组中的值,为了使偏移量输入多少,我们都可以适用.因此要一个一个的移动值.

使用一个temp保存要移动的数,将其他数后移,随后将temp值赋给开头.

假设数组长度为5

现在考虑,我们应该移动多少次?

1.offset为0:移动0次

2.offset为4:移动4次

3.offset为6:移动1次

4.offset为10:移动0次

所以,可以确定移动五次以内,是随着数组长度改变的.

这让我想起了,曾经写过的代码,不论给你的数是多少,我使用%,结果就可以控制.

因此,我们应该移动:offset%char.length

特殊情况的考虑:

1.offset为0:可以直接return,不return,for循环也是0次.

2.char[]数组为"":直接return,这个不return会报错的,x%0会报错!

解析

代码首先为特殊情况考虑,随后使用for循环控制移动次数,使用temp保存移动变量,使用while循环在for循环中做一次变量的整体移动.

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值