【剑指offer】58.左旋转字符串

163 阅读1分钟

描述

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

思路1: 由数据结构中的循环链表启发,将字符序列看成一个环状结构,若要循环左移n位,除去环状迭代,则当前需左移位数应是n=n%str.len,而str[i]移动后的下标应是(i-n+str.len)%str.len

function LeftRotateString(str, n)
{
    // write code here
    if(!str) return '';
    var arr=[];
    n=n%str.length;
    for(var i=0;i<str.length;i++){
        arr[(i-n+str.length)%str.length]=str[i];
    }
    return arr.join('');
}

思路2: 第二种想法是利用字符串子串截取api,将前n个(n%str.len)字符截取出来拼接到末尾

function LeftRotateString(str, n)
{
    // write code here
    if(!str) return "";
    n = n%str.length;
    return str.substring(n,str.length)+str.substr(0,n);
}