Google 面试真题:实现 Word Wrap(按最大宽度自动换行)的 Python 解法与逐行注释代码 – 一亩三分地 – 谷歌面经

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,一次扫描)

从左到右遍历单词,维护一个“当前行”:

  1. 如果当前行为空:直接放入该单词。
  2. 否则尝试把 " " + 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代写等服务助您早日上岸~

Leave a Reply

Your email address will not be published. Required fields are marked *