前端與算法 leetcode 344. 反轉字符串

[TOC]javascript

前端與算法 leetcode 344. 反轉字符串


題目描述

編寫一個函數,其做用是將輸入的字符串反轉過來。輸入字符串以字符數組 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"]

344. 反轉字符串數組

概要

用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%
的用戶

GitHub倉庫

344. 反轉字符串

相關文章
相關標籤/搜索