翻转字符串 (Reverse a String)
题目链接
题目诠释
这个
function
吸收一个字符串参数,返回翻转后的字符串比方吸收的是 “hello”,那末输出就是 “olleh”
参考链接
思绪提醒
先把字符串支解成为数组
翻转数组
把翻转后的数组兼并为字符串
参考答案
基础答案
function reverseString(str) {
var strArr = str.split('');
var reversedArr = strArr.reverse();
return reversedArr.join('');
}
诠释
第一步就是把传入的
str
支解,并赋值给strArr
第二步是把数组翻转,并赋值给
reversedArr
第三步是返回兼并以后的字符
须要注重的是,以上的
.split
和.join
都不会转变本来的字符串或数组,但reverse
会转变本来的数组
优化
function reverseString(str) {
return str.split('').reverse().join('');
}
诠释
.split
返回支解后的数组,因而能够直接挪用.reverse
.reverse()
要领返回的是翻转后的数组,因而能够直接挪用.join
.join
以后就是我们想要的字符串,直接返回即可这里用到了 Method Chaining,也就是要领的链式挪用。只需你熟习要领的返回值,就能够这么做,优点在于能够不必建立这么多变量
中级解法
直接应用字符串要领,而不须要转换成数组
function reverseString(str) {
var result = "";
for (var i = str.length - 1; i >= 0; i--) {
result += str[i];
}
return newString;
}
诠释
起首我们先建立一个变量,叫
result
,用于保留输出效果然后,从右侧最先遍历字符串。值得注重的是,就像数组一样,字符串一样能够经由历程所以来猎取某一个字符。比方,
str[0]
就是猎取第一个字符。再比方,str[-1]
就是猎取末了一个字符由于是从右侧最先遍历,那我们把每次遍历到的字符直接加到
result
就能够了须要注重的是边界前提的肯定,由于字符串的索引同样是从 0 最先的,因而遍历的初始值要设置为
str.length - 1
,完毕值为 0
高等解法
经由历程字符串要领以及递返来翻转
function reverseString(str) {
// 设置递归尽头(弹出前提)
if (!str) {
return "";
}
else {
// 递归挪用
return reverseString(str.substr(1)) + str.charAt(0);
}
}
诠释
这类要领,一最先不能明白没紧要。等做到高等算法题,再回来看看应当就能够明白了
递归涉及到两个要素,递归挪用以及弹出历程。
reverseString(str.substr(1))
就是递归挪用,+ str.charAt(0)
就是弹出历程代码在实行到
reverseString(str.substr(1))
的时刻,会从新挪用reverseString
,并传入str.substr(1)
作为参数。背面的+ str.charAt(0)
临时不会实行直到碰见传入的字符串为
""
,由于有了""
返回值,就不会再去挪用reverseString
了。这时刻,才会一步一步地实行+ str.charAt(0)
,也就是弹出历程
举个例子:
var str = "abc";
reverseString(str)
实行历程以下:
起首实行 reverseString(“abc”),这时刻传入的
str
不为空,所以实行else
部份。读到了reverseString(str.substr(1))
,这时刻就是递归挪用,实行这段代码,个中str.substr(1)
为 “bc”reverseString("bc")
,这时刻传入的str
不为空,所以实行reverseString(str.substr(1))
,个中str.substr(1)
为 “c”reverseString("c")
,这时刻传入的str
照旧不为空,所以实行reverseString(str.substr(1))
,个中str.substr(1)
为 “”reverseString("")
,终究,传入的str
为空,这时刻返回 “”
回到
reverseString("c")
这一步,适才的返回值是 “”,此时的str.charAt(0)
为"c"
,那末这一步的返回值是 “c”
回到
reverseString("bc")
,适才的返回值是 “c”,此时的str.charAt(0)
为"b"
,那末这一步的返回值是 “cb”
回到
reverseString("abc")
,适才的返回值是 “cb”,此时的str.charAt(0)
为"a"
,那末这一步的返回值是 “cba”
至此,我们得到了终究效果,”cba”