旋转字符串

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

样例
样例 1:
输入: str=“abcdefg”, offset = 3
输出: “efgabcd”

样例解释: 
返回旋转后的字符串。

原来的算法实现:
public class Solution {
/**
* @param str: An array of char
* @param offset: An integer
* @return: nothing
*/
public void rotateString(char[] str, int offset) {
int len = str.length;
int count = len - offset;
String str1 = new String(str, count, offset);
String str2 = new String(str,0,count);
String result = str1+str2;
System.out.println(result);
}

}
原来算法打算是用字符串截取的方式将源字符串分成两个再进行拼接,虽然在eclipse运行正确,但是在lintcode运行却报WA。找了半天不知道原因在哪,又去网上找了一份答案,如下:

public static void rotateString(char[] str, int offset) {
    	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;
        }
        String result = String.valueOf(str);
        System.out.println(result);
    }

这次在lintcode运行成功。
总结:字符串数组旋转应该首先考虑到对数组字符位置进行循环移动,同时注意要有判断参数为不为空和为不为0的意识,比如这儿不进行字符长度和偏移量0判断的话提交就会报错。总体思路就是先保存最末尾的字符,然后从头整体开始向右移动(会覆盖最后一个字符,并且第一位和第二位字符重复),将提前保存好的字符赋给第一位。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值