如何在 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,我们将跟踪正在形成的当前块。并使用循环遍历数组中的单词。

Learn JavaScript in-depth with real-world projects through our JavaScript certification course. Enroll and become a certified expert to boost your career.

算法

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

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

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

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

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

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

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

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

示例

Open Compiler
// 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+ 次浏览

启动你的 职业生涯

通过完成课程获得认证

立即开始
广告