剑指offer-[左旋转字符串]-JavaScript实现

我感觉这道题用JS用天生的优势。因为JS的数组头和尾都可以进行操作。用好push和shift这道题就非常简单~

题目描述

汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!

思路分析

左移出来的n位将顺序的移入到后n位。可以想象是n个数依次从头拿出然后插入到尾部。
即在一个n次的循环中,用一个temp记下数组shift的数,并push到数组中。

具体JS代码实现1

function LeftRotateString(str, n)
{
    // 判断输入为空的异常状态
    if(str == null)
    {
        return "";
    }
    var strArr = new Array();
    var result = "";
    strArr = str.split("");
    for(var j = 0; j < n; j++)
    {
        var temp = strArr.shift();
        strArr.push(temp);
    }
    result = strArr.join("");
    return result;
}

另一种思路

上面的做法有点依赖于数组的API。下面这个做法比较常规。
要左移前n位,相当于前n位成为了最后n位。剩下几位成了开始。那么可以先反转前N位,再反转后几位,最后将整个字符串翻转。就是最后的结果了~

具体JS代码的实现2

function LeftRotateString(str, n)
{
    // write code here
    if(str == null)
    {
        return "";
    }
    var strArr1 = str.split(""); 
    reverse(strArr1,0,n-1)
    reverse(strArr1,n,strArr1.length-1)
    reverse(strArr1,0,strArr1.length-1)
    return strArr1.join("");

}
//实现数组i-j位的翻转
function reverse(strArr,i,j)
{
	while(i<j)
	{
		var temp = strArr[i];
		strArr[i] = strArr[j];
		strArr[j] = temp;
		i++;
		j--;
	}
	return strArr;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值