LeetCode 344. Reverse String
題目
Write a function that takes a string as input and returns the string reversed.
Example: Given s = "hello", return "olleh".
翻譯
將一個字串反轉後回傳。
範例: s= "hello", return "olleh"
思路
這題很簡單,應該是所有題目最簡單的一題,如果你解不出來建議不要往下看,回頭在重新學一下怎麼寫程式。
這題的解法是這樣,將字串拆成一個陣列,然後將陣列從後面開始串成一個字串並回傳。
ex. "hello" -> 拆開['h','e','l','l','o'] -> 'o'+'l'+'l'+'e'+'h'
解題
var reverseString = function(s) {
var result = ""; //回傳的字串
var ary = s.split(""); //字串拆成陣列
for(var i = ary.length-1 ; i >= 0 ; i--){
result = result + ary[i]; //從後面串回字串
}
return result;
};
進階
在陣列內直接將頭尾元素交換,接著交換第二個元素與倒數第二個元素,這樣的做法只要跑一半的迴圈就可以,速度上會快很多。
下面範例因為切成array來做,所以實際上速度會比較慢。
未交換前 ['h','e','l','l','o']
第1次交換 ['h','e','l','l','o'] o,h互換 ['o','e','l','l','h']
第2次交換 ['o','e','l','l','h'] e,l互換 ['o','l','l','e','h']
/**
* @param {string} s
* @return {string}
*/
var reverseString = function(s) {
var result = "";
var ary = s.split("");
for(var i = 0, max = (ary.length-1)/2 ; i < max ; i++){
var temp = ary[i];
ary[i] = ary[ary.length - 1 - i];
ary[ary.length - 1 - i] = temp;
}
return ary.join("");
};