如何在 JavaScript 中将句子拆分成固定长度的块而不破坏单词

javascriptweb developmentfront end technologyobject oriented programming

在给定的问题陈述中,我们必须将给定的句子拆分成固定长度的块而不破坏句子的单词。我们必须在 Javascript 中实现解决方案。

理解问题

当前的问题是将给定的句子拆分成固定长度的块而不破坏其单词。因此,我们将句子分成给定长度的子字符串,同时确保每个块中的单词都保持完整。

例如,假设我们有一句话"您正在阅读 Tutorials point 网站上的这篇文章",因此输出应该是 ['您正在阅读','这篇文章','Tutorials point','网站']。因此,我们必须实现函数来完成这项任务。

给定问题的逻辑

为了在 Javascript 中解决这个问题,我们将定义一个名为 splitSentence 的函数。该函数有两个参数:第一个是要拆分的句子和所需的块长度。因此,输入的句子将在"split"方法的帮助下拆分成单个单词。split 方法将在每个空格字符处拆分句子并返回单词数组。我们将使用一个空数组来存储生成的块。借助当前块,我们将跟踪正在形成的当前块。并使用循环遍历数组中的单词。

算法

步骤 1:创建一个函数来拆分给定输入句子的句子。该函数接受两个参数,即要拆分的句子和块长度。

步骤 2:借助"split"方法拆分每个单词,并将这些单词存储在 words 变量中。

步骤 3:创建一个空白数组来存储结果块。

步骤 4:要跟踪当前块,请创建一个 currentBlock 变量并将其初始设置为空字符串。

步骤 5:借助循环遍历 words 数组中的每个单词。检查当前块是否满足每个单词的块长度标准。

步骤 6:如果每次迭代中的单词都添加到当前块中,并且块长度未达到最大值,则应将单词附加到当前块中。

步骤 7:如果当前块中超出了块的长度,那么我们将创建一个新的块,并添加当前单词。

步骤 8:当循环结束时,最后一个块将添加到块数组中,并将块数组作为函数的输出返回。

示例

// 将给定句子拆分为单词块的函数
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'
]

复杂度

由于我们使用了 split 方法和循环,因此将句子拆分成词块的时间复杂度为 O(n)。这里 split 方法和循环都需要 O(n) 的时间将句子拆分成词块。假设总块数为"b",则空间复杂度为 O(n + b)。

结论

在我们的函数中,我们有效地将给定的句子拆分成相同长度的块,而无需拆分单词。该函数的时间复杂度和空间复杂度分别为 O(n) 和 O(n+b)。在整个过程中,我们确保每个单词都是准确且有意义的。


相关文章