这一题相对简单,但是代码质量可能不是很好,我分享一下我的做题笔记以及做题过程给各位欣赏,有什么不足望各位大佬指出来
原题目,各位小伙伴也可以试着做一下
8. 旋转字符串 中文English 给定一个字符串(以字符数组的形式给出)和一个偏移量,根据偏移量原地旋转字符串(从左向右旋转) 样例 样例 1: 输入: str="abcdefg", offset = 3 输出: str = "efgabcd" 样例解释: 注意是原地旋转,即str旋转后为"efgabcd" 样例 2: 输入: str="abcdefg", offset = 0 输出: str = "abcdefg" 样例解释: 注意是原地旋转,即str旋转后为"abcdefg" 样例 3: 输入: str="abcdefg", offset = 1 输出: str = "gabcdef" 样例解释: 注意是原地旋转,即str旋转后为"gabcdef" 样例 4: 输入: str="abcdefg", offset =2 输出: str = "fgabcde" 样例解释: 注意是原地旋转,即str旋转后为"fgabcde" 样例 5: 输入: str="abcdefg", offset = 10 输出: str = "efgabcd" 样例解释: 注意是原地旋转,即str旋转后为"efgabcd" 挑战 在数组上原地旋转,使用O(1)的额外空间 注意事项 offset >= 0 str的长度 >= 0
做题笔记
这道题目我分析了一下,想了一个相对简单理解实用的方法 把数组的位置组成一个新数组,对位置数组进行推入弹出操作再将位置数组对应原文字符串得到新文字符串不就可以实现了题目所需的功能了吗? 话不多说开始实现
实现代码
/** * @param str: An array of char * @param offset: An integer * @return: */ const rotateString = function (str, offset) { // write your code here var strlen = str.length; var space = new Array(); for (var i = 0; i < strlen; i++) { space.push(i);//堆入每个位置 } console.log(space); for (var j=0;j < offset;j++){ var last = space.pop();// 取出尾部并删除 space.unshift(last);// 添加到头 } console.log(space); var newstr = ""; for (var k = 0;k < space.length;k++){ console.log(space[k]); console.log(newstr); newstr+= str[space[k]]; } console.log(newstr); return newstr; }
谷歌浏览器测试完成,但是lintcode提交代码却有奇怪的问题
*为什么这样输出还是出现“abcdefg”。搞得我提交不了代码
*