描述
汇编语言中有一种移位指令叫做循环左移(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);
}