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("");
};

results matching ""

    No results matching ""