[TOC]javascript
編寫一個函數,其做用是將輸入的字符串反轉過來。輸入字符串以字符數組 char[] 的形式給出。前端
不要給另外的數組分配額外的空間,你必須原地修改輸入數組、使用 O(1) 的額外空間解決這一問題。java
你能夠假設數組中的全部字符都是 ASCII 碼錶中的可打印字符。git
示例 1:github
輸入:["h","e","l","l","o"] 輸出:["o","l","l","e","h"]
示例 2:算法
輸入:["H","a","n","n","a","h"] 輸出:["h","a","n","n","a","H"]
用s.reverse()的童鞋就不要囂張了,項目中能夠這樣作,可是算法題中不建議這樣哈函數
雙指針,遞歸測試
定義頭尾兩個指針,只要他們尚未重合就交換指針指向的字符指針
取字符串長度的一半,隨後從字符串中間開始交換,直到初值爲0
/** * @param {character[]} s * @return {void} Do not return anything, modify s in-place instead. */ var reverseString = function (s) { // 雙指針 if (s.length > 0) { let [i, j] = [0, s.length - 1]; while (i < j) { [s[i], s[j]] = [s[j], s[i]]; i++; j--; } } // 遞歸 // const swap = (start, s) => { // if (start > 0) { // [s[start - 1], s[s.length - start]] = [s[s.length - start], s[start - 1]]; // swap(--start, s); // } // }; // swap(~~(s.length / 2), s); };
input:['h', 'e', 'l', 'l', 'o'] output:[ 'o', 'l', 'l', 'e', 'h' ]
執行用時 :120 ms, 在全部 javascript 提交中擊敗了98.62%的用戶 內存消耗 :47.3 MB, 在全部 javascript 提交中擊敗了10.98% 的用戶