在 JavaScript 中反轉一個字串

Sahil Bhosale 2023年10月12日
  1. 使用 JavaScript 中的內建函式反轉字串
  2. 在 JavaScript 中使用遞迴來反轉字串
在 JavaScript 中反轉一個字串

你可以通過多種方式來就地反轉 JavaScript 中的字串,而無需使用任何額外的空間。這樣做的好處是你可以編寫具有 O(1) 空間複雜度的程式。這意味著你不需要任何額外的記憶體空間來儲存資料。你只能使用提供給我們的相同空間,即輸入的大小,並在該空間內反轉給定的字串。

以下是一些可以在 JavaScript 中反轉字串的方法。

使用 JavaScript 中的內建函式反轉字串

讓我們看看如何在 JavaScript 中提供的內建函式的幫助下將字串反轉。有 3 個函式可以實現這個目的,這些函式是:split()reverse()join()

下面是這三個函式各自的作用。

  1. split() 將字串的每個字元分開,並將其轉換成陣列。
  2. reverse() 將獲取該陣列並反轉其中的元素。
  3. join() 將聯接已被 reverse() 函式反轉的字元。
function reverse(s) {
  return s.split('').reverse().join('');
}

var sss = reverse('adam')
console.log(sss)

輸出:

mada

要反轉字串,首先必須在輸入字串上應用 split() 函式。此函式將字串轉換為包含該字串所有字元的物件。之後,你可以使用內建的 JavaScript 函式 reverse() 來反轉字串。此函式不能直接與字串一起使用,因此必須首先使用 split() 函式將字串轉換為物件。

現在,你有了一個物件,裡面的所有字元都是相反的順序。要將物件轉換回字串,可以使用 join() 函式。此函式將從字串中獲取每個字元,並將其連線起來以形成字串。

在 JavaScript 中使用遞迴來反轉字串

反轉字串的另一種方法是使用遞迴。在這裡,你建立了一個名為 reverse() 的函式,該函式將 str 作為引數。在編寫遞迴函式時,首先必須確保新增基本條件。基本條件允許我們在執行期間終止遞迴程式。如果程式中沒有基本條件,它將無限期執行,這是我們不希望的。這就是為什麼你需要檢查使用者傳遞給此函式的字串是否為空的原因。如果為空,則將終止程式。否則,你將執行遞迴呼叫。

function reverse(str) {
  if (str === '') {
    return '';
  } else {
    return reverse(str.substr(1)) + str.charAt(0);
  }
}

let reverseStringIs = reverse('adam')
console.log(reverseStringIs)

輸出:

mada

else 部分,我們只有一行程式碼。你可以進一步認為你已將這一行程式碼分為兩部分(這只是假設,以便你可以理解程式碼)。第一部分是 reverse(str.subset(1)),第二部分是 str.charAt(0)

第一部分採用整個 adam,並採用從索引號 1 開始的子集,即 dam,因為 d 在第一個位置。第二部分採用整個字串,即 adam,並獲得索引為 0 的字元,即 a

我們執行一個遞迴呼叫,然後將此子字串傳遞給 reverse() 函式,即 dam 而不是 adam,因為你已經從原始字串建立了一個子字串。現在,當你執行 else 部分時,你將以 dam 作為輸入字串。你將從索引 1 開始使用 substr() 函式建立該字串的子字串。子字串將為 am,而 str.charAt(0) 將為我們提供索引 0 處的字元,即 d

這個過程一直持續到整個字串變為空為止。此時,這就是我們的堆疊的樣子。

遞迴堆疊

這是從堆疊中返回字元的順序-m, a, d, a。一旦字串變空,程式將開始從堆疊中逐個彈出元素,你將獲得相反的最後一個字串,即 madam,作為輸出。

作者: Sahil Bhosale
Sahil Bhosale avatar Sahil Bhosale avatar

Sahil is a full-stack developer who loves to build software. He likes to share his knowledge by writing technical articles and helping clients by working with them as freelance software engineer and technical writer on Upwork.

LinkedIn