本文正在参与掘金团队号上线活动,点击 查看大厂春招职位
一、题目描述
二、思路分析
从第n位开始截取字符串,分成两半,前一半放在后一半后面
三、AC代码
我这里有7种解法,依次是:
1.substr()截取+拼接
var reverseLeftWords = function(s, n) {
return s.substr(n)+s.substr(0,n);
};
2.substring()和substr()一个意思
var reverseLeftWords = function(s, n) {
return s.substring(n)+s.substring(0,n);
};
3.slice()还是内味儿
var reverseLeftWords = function(s, n) {
return s.slice(n) + s.slice(0, n);
};
瞎*写写出来以上3种,那substr()、substring()、slice()的区别是啥?
- 相同点:三者都接收两个参数。
- 不同点1:
substr()接受的是其实位置和要截取的长度,
substring()和slice()接收的是起始位置和结束位置(不包括结束位置)。 比如
var test = 'hello world';
test.substr(4,7)); //o world
test.slice(4,7)); //o w
test.substring(4,7)); //o w
这里有个需要注意的地方就是:substring是以两个参数中较小一个作为起始位置,较大的参数作为结束位置。
比如
var test = 'hello world'
test.substring(7,4); //o w
贼狠
- 不同点2:
当接收的参数是负数时,
substr则仅仅是将第一个参数与字符串长度相加后的结果作为第一个参数;
substring则干脆将负参数都直接转换为0;
slice会将它字符串的长度与对应的负数相加,结果作为参数;
比如:
var test = 'hello world'; //长11位
test.substr(-3); //rld 相当于test.substring(8);
test.substring(-3); //hello world 相当于test.substring(0);
test.slice(-3); //rld 相当于test.substring(8);
test.substr(3,-4); //空字符串 因为他的第二个参数表示要截取的长度是-4,不合理
test.substring(3,-4); //hel8 相当于test.substring(3, 0);
test.slice(3,-4); //lo w 相当于test.substring(3, 7);
一脸懵逼,得缓一会儿
4.字符串拼接 也是内味儿
var reverseLeftWords = function(s, n) {
return `${s.substr(n)}${s.substr(0, n)}`;
};
5.正则替换
var reverseLeftWords = function(s, n) {
return s.replace(new RegExp('(\\w{' + n+ '})(\\w*)'),'$2$1')
};
6.concat()
var reverseLeftWords = function(s, n) {
return s.slice(n).concat(s.slice(0, n));
};
7.replace()
var reverseLeftWords = function(s, n) {
return s.replace(s.substr(0, n), '') + s.substr(0,n)
};
四、总结
又是心刺挠的一天