题目点评
字符串作在程序中是非常常见的,因为程序中绝大部分的数据都可以当作字符串来处理。需要对字符的处理方法比较熟悉,在回答的时候尽量能够说出多种解决方法更好!字符串翻转的方法
1)使用字符串函数//str=hello function reverseString(str) { var array = str.split('');//['h','e','l','l','o']; array = array.reverse();// ['o','l','l','e','h']; str = array.join('');//"olleh" return str; }
上面代码可以合并一行代码
2)使用for循环//str=hello function reverseString(str) { return str.split('').reverse().join('');; }
使用逆序遍历字符串,从后面将字符串累加起来。function reverseString(str) { var newStr=""; for(var i=str.length-1;i>=0;i--){ newStr+=str[i]; } return newStr; }
3)使用递归
function reverseString(str) { if (str === "") { return ""; } else { return reverseString(str.substr(1)) + str.charAt(0); } } reverseString("hello"); // => olleh
第一部分的递归方法。你需要记住,你不会只调用一次,你将会有几个嵌套的调用。
每次调用str === "?"
reverseString(str)
+ str.charAt(0)
第一次调用
reverseString("Hello")
reverseString("ello") + "h"
第二次调用
reverseString("ello")
reverseString("llo") + "e"
第三次调用
reverseString("llo")
reverseString("lo") + "l"
第四次调用
reverseString("lo")
reverseString("o") + "l"
第五次调用
reverseString("o")
reverseString("") + "o"
第二部分的递归方法。
每次调用
返回
第五次调用
reverseString("") + "o" = "o"
第四次调用
reverseString("o") + "l" = "o" + "l"
第三次调用
reverseString("lo") + "l" = "o" + "l" + "l"
第二次调用
reverserString("llo") + "e" = "o" + "l" + "l" + "e"
第一次调用
reverserString("ello") + "h" = "o" + "l" + "l" + "e" + "h"
上面的方法还可以继续改良一下,改成三元操作符:
function reverseString(str) {
return (str === '') ? '' : reverseString(str.substr(1)) + str.charAt(0);
}
reverseString("hello"); // => olleh