如何在 JavaScript 中将句子拆分成固定长度的块而不破坏单词
在给定的问题陈述中,我们必须将给定的句子拆分成固定长度的块而不破坏句子的单词。我们必须在 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)。在整个过程中,我们确保每个单词都是准确且有意义的。