不得不说,这年头大家为找工作真的是无所不用其极啊。这不,居然有网友因为“0 offer太久”,家里人看不下去了,直接上法事了!
可能他家里人想的是,既然履历不行,那就来点玄学助攻,毕竟传统智慧总有些道理嘛!不过网友们一看帖子,就被整笑喷了,纷纷要求加入,甚至有人要点自己的名,让法事的功效也波及一下自己。
但是说白了,“offer”这种东西,不只是技术堆积,还真的需要一点点运气——就像我们代码调试,有时候也会求求“代码之神”保佑自己别出bug!
找工作的时候,不管你信不信玄学,大家只要坚持努力、不断迭代,总会有属于自己的那份“offer”到来的!希望法事也好,祈祷也罢,最后都能让我们这些0 offer的兄弟们,早点拿到心仪的工作。
今日面试题
今天来聊聊一个常见的面试题:文本左右对齐(Text Justification)。有些小伙伴可能在面试中碰到过这个问题,或者在自己的编程中也有过类似的需求——如何将一段文本根据特定的规则进行对齐,尤其是把文本左右对齐,排列整齐,符合美观的标准。话不多说,让我们进入今天的主题。
我们都知道,在显示文本时,通常有三种对齐方式:左对齐、右对齐和居中对齐。大多数编辑器都会默认将文本左对齐,但在一些特殊场合,比如排版、简历、报告或者文章中,可能就需要我们手动控制文本的对齐方式。
问题的要求其实很简单:给定一个字符串数组words
,你需要将这些字符串合并成若干行,每行字符的总长度要与给定的maxWidth
保持一致。
每行的字符应该是左右对齐的,具体来说,要尽量均匀分布单词之间的空格。如果最后一行的字符数不足maxWidth
,则直接左对齐,剩余的空格都放在行末。
思路解析
基本操作:我们首先要做的就是逐行填充,直到每一行达到 maxWidth
的长度。填充空格:然后,对于每一行的空格,我们需要做的就是让它们尽可能均匀分布。如果某行有 n
个空格,我们需要把这些空格分配到该行的单词之间。处理最后一行:最后一行的空格只需要留在行尾,且不需要进行复杂的均匀分配。
接下来,我们来一步步实现这个功能。
我们将通过一个简单的算法来实现这个功能。首先,假设输入为一个数组words
和一个整数maxWidth
。我们的目标是返回一个字符串数组,其中每一行的字符数不超过maxWidth
,且尽可能做出左右对齐。
var fullJustify = function(words, maxWidth) {
let result = [];
let currentLine = [];
let currentLength = 0;
for (let i = 0; i < words.length; i++) {
// 如果当前行添加当前单词后不超过 maxWidth
if (currentLength + words[i].length + currentLine.length <= maxWidth) {
currentLine.push(words[i]);
currentLength += words[i].length;
} else {
// 当当前行填满,进行处理
result.push(justifyLine(currentLine, currentLength, maxWidth));
// 重置当前行
currentLine = [words[i]];
currentLength = words[i].length;
}
}
// 处理最后一行
result.push(justifyLine(currentLine, currentLength, maxWidth, true));
return result;
};
// 辅助函数:处理每行的空格分配
function justifyLine(words, currentLength, maxWidth, isLastLine = false) {
let totalSpaces = maxWidth - currentLength;
if (isLastLine || words.length === 1) {
// 最后一行或者只有一个单词的情况,空格放在末尾
return words.join(' ') + ' '.repeat(totalSpaces);
}
let spaceBetweenWords = Math.floor(totalSpaces / (words.length - 1));
let extraSpaces = totalSpaces % (words.length - 1);
// 将空格均匀分配给每两个单词之间
let result = words[0];
for (let i = 1; i < words.length; i++) {
let spaces = spaceBetweenWords + (i <= extraSpaces ? 1 : 0);
result += ' '.repeat(spaces) + words[i];
}
return result;
}
假设我们有以下输入:let words = ["This", "is", "an", "example", "of", "text", "justification"];
let maxWidth = 16;
执行fullJustify(words, maxWidth)
会返回如下的结果:
[
"This is an",
"example of text",
"justification "
]
可以看到,第一行的单词之间的空格分布是均匀的,第二行也做了类似的处理,而最后一行则将剩余的空格加在了末尾。
目前,对编程、职场感兴趣的同学,大家可以联系我微信:golang404,拉你进入“程序员交流群”。
虎哥私藏精品 热门推荐 虎哥作为一名老码农,整理了全网最全《前端资料合集》。