> 文章列表 > 剑指 Offer 58 - II. 左旋转字符串

剑指 Offer 58 - II. 左旋转字符串

剑指 Offer 58 - II. 左旋转字符串

题目描述

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。

示例 1:
输入: s = "abcdefg", k = 2
输出: "cdefgab"示例 2:
输入: s = "lrloseumgh", k = 6
输出: "umghlrlose"

限制:

1 <= k < s.length <= 10000

题解一: slice和concat

截取字符串加拼接字符串,用到的是js中的slice()和concat()。

slice函数中可以传递一个或者两个参数,传递一个参数,则截取该参数后面的字符串,传递两个参数,则截取索引为参数一到索引为参数二之间的字符串。

concat函数则可以连接字符串,它的功能很强大,也可以连接数组

注意,以上方法不改变原字符串的内容,而是生成新的字符串。

力扣题解:

var reverseLeftWords = function (s, n) {//n后面的所有var str = s.slice(n);//n前面的所有var str1 = s.slice(0, n)//把str1和str连起来var str2 = str.concat(str1)//返回出去return str2
}

题解二:利用数组

这个方法稍微麻烦,是绕了弯子的。但是可以很好的帮助我们复习数组知识。我们可以先把字符串转化为数组,然后循环遍历操作数组,把数组的第一元素放到数组的末尾。循环n-1次。最后再把数组转化为字符串。

先说说数组与字符串的转化吧:字符串转化为数组用到spiit,数组转化为字符串用到join。

再说说对数组的操作:删掉第一个元素用shift;在数组的末尾加元素用的是push。顺便复习一下与之相反的:在数组头部添加第一个元素用unshift,删掉数组末尾元素用pop。

注意,对数组的大部分操作,不改变原数组,而是返回一个新的数组,所以需要定义一个新的变量去接收。

力扣题解:

var reverseLeftWords = function(s, n) {var str1 = s.split('');//截取数组for(var i = 0; i < n; i++) {var a = str1.shift();var str2 = str1.push(a)}var str2 = str1.join('')return str2
};

这里有我在复习数组和字符串时写的一些代码,可以拿去学习:

这是数组:

// 括号里面参数可以有参数,若为一个数字,表示该数组的长度,如果为多个数字或者一个(多个)非数字表示的是传递数组中应该包含的值。
var arr = new Array()
arr = [1, 2, 3, 4, 'xd']// 1.join:将数组的元素组起一个字符串,该方法只接收一个参数
// console.log(arr)//原数组
// console.log(arr.join())//逗号隔开
// console.log(arr.join('-'))//分隔符隔开
// console.log(arr)// // 2.push:可以接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度。 
// arr.push('abc')
// arr.push('cde', 'fg')
// console.log(arr)// // 3.pop:数组末尾移除最后一项,减少数组的 length 值,然后返回移除的项
// arr.pop()//没有参数
// console.log(arr)// // 4.shift:删除原数组第一项,并返回删除元素的值;如果数组为空则返回undefined 。 
// arr.shift();
// console.log(arr)
// // 5.unshift:将参数添加到原数组开头,并返回数组的长度 。
// arr.unshift(1)
// console.log(arr)
// // 6.sort:升序排序
// var arr1 = ['1', 3, 5, '2']
// console.log(arr1.sort())// // 7.reserve:反转数组4
// var arr2 = ['猿', '猫', '小', '克', '力', '巧',]
// var arr2 = arr2.reverse()
// console.log(arr2.join(''))//join可以让数据去掉逗号
// // 8.concat() :将参数添加到原数组中。这个方法会先创建当前数组一个副本,然后将接收到的参数添加到这个副本的末尾,最后返回新构建的数组。在没有给 concat()方法传递参数的情况下,它只是复制当前数组并返回副本。
// var arr3 = arr.concat(1, 2, 1);
// console.log(arr3)// //下面是截取字符串 slice
// // 返回从原数组中指定开始下标到结束下标之间的项组成的新数组。
// var arr4 = [1, 2, 3, 4, 5]
// //一个下标
// console.log(arr4.slice(2))//3, 4, 5
// //两个下标

这是字符串:

// 字符串介绍
//字符串可以是对象
//所有字符串方法都是返回新的字符串,不会更改原始字符//1.length 显示字符串的长度
//2.replace(All) 用于替换,内部有两个参数
//3.split 字符串->数组,且分隔符
//按什么来分割。必须是字符串中要有的
var s = '   baby cat   ' 
var c = s.split(' ');
console.log(c)
//toUpperCase(大写) toLowerCase(小写)转化大小写//trim 删除空格
var d = s.trim();
console.log(d)//concat 连接字符串
var arr = [1, 2, 3]
var arr1 = arr.concat(222)
console.log(arr1)//charAt(‘索引值’):返回指定下标的字符
console.log(d.charAt(0))// slice():提取字符串的某个部分并在新字符串中返回被提取的部分,俩参数:起始索引,终止索引,不改变原来的字符串
console.log(d.slice(1))
console.log(d.slice(1, 2))//search():搜索特定值的字符串,并返回匹配的位置
var m = 'forever love'
console.log(m.search('e'))