如何在 JavaScript 中將句子分割成固定長度的塊,且不拆分單詞


在給定的問題陳述中,我們需要將給定的句子分割成固定長度的塊,並且不能拆分句子的單詞。並且我們需要用 Javascript 實現該解決方案。

理解問題

手頭的問題是將給定的句子分割成固定長度的塊,且不拆分其中的單詞。因此,我們將句子分成給定長度的子字串,並且還要確保每個塊中的單詞都保持完整。

例如,假設我們有一個句子“You are reading this article on Tutorials point website”,那麼輸出應該為 [ 'You are reading', 'this article on', 'Tutorials point', 'website' ]。因此,我們需要實現一個函式來完成此任務。

給定問題的邏輯

為了在 Javascript 中解決這個問題,我們將定義一個名為 splitSentence 的函式。該函式接受兩個引數:第一個是要分割的句子,第二個是所需的塊長度。因此,輸入句子將藉助 'split' 方法分割成各個單詞。split 方法將在每個空格字元處分割句子並返回單詞陣列。我們將使用一個空陣列來儲存結果塊。藉助 current block,我們將跟蹤正在形成的當前塊。並使用迴圈遍歷陣列中的單詞。

演算法

步驟 1:建立一個函式來分割給定輸入句子的句子。該函式接受兩個引數,即要分割的句子和塊長度。

步驟 2:藉助 ‘split’ 方法分割每個單詞,並將這些單詞儲存在 words 變數中。

步驟 3:建立一個空陣列來儲存結果塊。

步驟 4:為了跟蹤當前塊,建立一個 currentBlock 變數,並將其初始設定為一個空字串。

步驟 5:藉助迴圈遍歷 words 陣列中的每個單詞。對於每個單詞,檢查當前塊是否滿足塊長度的條件。

步驟 6:如果每次迭代中的單詞都新增到當前塊中並且塊長度沒有達到最大,則應將該單詞附加到當前塊。

步驟 7:如果當前塊中的塊長度超過了,那麼我們將建立一個新的塊,並將當前單詞新增到其中。

步驟 8:當迴圈結束時,最後一個塊將被新增到 blocks 陣列中,並且 blocks 陣列將作為函式的輸出返回。

示例

 // Function to split the given sentence into block of words
function splitSentence(sentence, blockLength) {
   const words = sentence.split(' ');
   const blocks = [];
   let currentBlock = '';

   for (let i = 0; i < words.length; i++) {
      const word = words[i];
      if (currentBlock.length + word.length <= blockLength) {
         currentBlock += (currentBlock.length > 0 ? ' ' : '') + word;
      } else {
         blocks.push(currentBlock);
         currentBlock = word;
      }
   }
   if (currentBlock.length > 0) {
      blocks.push(currentBlock);
   }

   return blocks;
}
const sentence = "This is a sentence that has to be splitted into blocks of a fixed length";
const blockLength = 15;

const result = splitSentence(sentence, blockLength);
console.log(result);

輸出

[
    'This is a',
    'sentence that',
    'has to be',
    'splitted into',
    'blocks of a',
    'fixed length'
]

複雜度

將句子分割成單詞塊的時間複雜度為 O(n),因為我們使用了 split 方法和迴圈。此處,split 方法和迴圈都花費 O(n) 時間將句子分割成單詞塊。並且假設塊的總數為 'b',那麼空間複雜度為 O(n + b)。

結論

在我們的函式中,我們有效地將給定的句子分割成了相同長度的塊,且沒有拆分單詞。該函式的時間複雜度和空間複雜度分別為 O(n) 和 O(n+b)。在整個過程中,我們確保了每個單詞都是準確且有意義的。

更新於: 2023年8月14日

1K+ 次瀏覽

啟動你的 職業生涯

透過完成課程獲得認證

立即開始
廣告
© . All rights reserved.