Input is a string and a max width length. If a word is too long to fit into one line, we change line and move it to the other line. Implement a Python algorithm for this, with algorithm and code comment each line to explain.
(这类题在面试里也常被叫做 Word Wrap / Text Justification(简化版)。)
面试官通常会先确认:
- “我们按空格分词,对吧?单词之间只保留一个空格?”
- “每行长度不超过 maxWidth;如果当前行放不下下一个词,就把这个词放到下一行。”
- “如果某个词本身长度就超过 maxWidth,要不要拆词/加连字符,还是允许它单独占一行超出?”(很多时候默认:词不会超过 maxWidth;你也可以主动提出可选方案。)
核心思路(贪心 Greedy,一次扫描)
从左到右遍历单词,维护一个“当前行”:
- 如果当前行为空:直接放入该单词。
- 否则尝试把
" " + word拼到当前行后面:- 若长度不超过
maxWidth:加入当前行 - 否则:把当前行输出到结果里,开启新行,把这个 word 放进新行
- 若长度不超过
时间复杂度 O(n)(n 为字符/单词总量级),空间复杂度 O(n)(输出占用)。
面试官常见追问(你可以这样答)
- Q:为什么用贪心?会不会错过更优?
A:题目要求只是“放不下就换行”,没有“最少行数/最均匀排版”等全局最优化目标,因此一次扫描的贪心就是题意本身。 - Q:如果输入包含很多空格、换行、tab 呢?
A:split()会把所有连续空白当分隔符并自动忽略多余空白,输出更干净;如果要保留原始空格,则需要改用更精细的解析。 - Q:如果出现超长单词怎么办?
A:我先明确假设“单词长度不超过 maxWidth”;若需要支持超长词,可以选择:
1)硬切分(每maxWidth一段)
2)加连字符-做断词
3)允许该词单独占一行并超出(看产品需求)
这种题看起来简单,但 Google 常考的是:你有没有先澄清边界、再把规则讲清楚、最后写出可维护的代码。如果你在 OA/VO 里经常“会做但讲不顺”,csoahelp 的面试辅助会更侧重把你的思路“结构化表达”出来,让面试官听起来非常省心。
我们也有代面试,面试辅助,OA代写等服务助您早日上岸~

