1324. 竖直打印单词
本题的核心是确定最长单词长度,然后按行遍历每个单词对应字符,补空格并去尾空格。用 Python 的字符串方法.rstrip()可以方便地处理尾部多余空格,满足题目要求。代码实现简洁,效率足够。这种竖直打印问题在面试和算法训练中较常见,掌握此类技巧对字符处理很有帮助。
·
按单词竖直打印字符串 —— 题解与代码实现
题目描述
给你一个字符串 s,字符串中包含若干单词(单词之间以空格分隔)。
请你将这些单词按照它们在字符串中的出现顺序竖直打印出来。
具体要求如下:
- 竖直排列后的每列对应一个单词,每行对应单词的第 i 个字符;
- 如果某个单词长度不足,则用空格补齐;
- 输出的每一行尾部不能有多余的空格(即不允许尾随空格);
- 返回的结果是一个字符串列表,每个字符串代表一行竖直排列后的内容。
例如,对于输入:
s = "HOW ARE YOU"
预期输出是:
[
"HAY",
"ORO",
"WEU"
]
其中,第一列是单词 "HOW" 的第 1、2、3 个字符,第二列是单词 "ARE" 的字符,第三列是单词 "YOU" 的字符。
解题分析
要实现该功能,关键在于如何正确地将单词按列对齐并竖直输出,且要注意:
- 确定竖直排列的总行数
因为不同单词长度不一样,最长单词决定了最终竖排字符串的行数。 - 按行构造每一行字符串
对于每一行i,从每个单词取第i个字符,如果该单词长度不足,则用空格补位。 - 去除每行末尾的多余空格
题目要求输出字符串不含尾部空格,必须使用字符串的.rstrip()函数去除。
解题方法及代码实现
我们用 Python 实现这一过程。步骤如下:
from typing import List
class Solution:
def printVertically(self, s: str) -> List[str]:
# 1. 拆分字符串为单词列表
words = s.split()
# 2. 找到最长单词长度
max_len = max(len(word) for word in words)
res = []
# 3. 按行遍历(0到max_len-1)
for i in range(max_len):
line_chars = []
# 4. 取每个单词的第 i 个字符(不存在则补空格)
for word in words:
if i < len(word):
line_chars.append(word[i])
else:
line_chars.append(' ')
# 5. 拼接成字符串并去除尾部空格
line = ''.join(line_chars).rstrip()
res.append(line)
return res
代码分析与比较
- 时间复杂度:
假设有n个单词,最长单词长度为m,整体时间复杂度是O(n * m),因为要遍历所有单词的每个字符位置。 - 空间复杂度:
结果数组存储约m行,每行最多n个字符,空间复杂度O(n * m)。 - 优点:
代码简洁明了,逻辑直观,利用字符串的.rstrip()高效去尾部空格。 - 可优化点:
目前代码每行会先补足所有空格,最后再去尾部空格,实际对性能影响微乎其微。
相比其他可能使用复杂结构的方法(例如矩阵填充后逐行截取),这种方案更简洁且容易理解。
示例说明
示例 1
输入:
s = "HOW ARE YOU"
- 单词列表:
["HOW", "ARE", "YOU"] - 最长单词长度:3
按行处理:
|
行号(i) |
取单词第 i 个字符 |
拼接结果(未去尾空格) |
去尾空格后结果 |
|
0 |
"H" "A" "Y" |
"HAY" |
"HAY" |
|
1 |
"O" "R" "O" |
"ORO" |
"ORO" |
|
2 |
"W" "E" "U" |
"WEU" |
"WEU" |
返回:
["HAY", "ORO", "WEU"]
示例 2
输入:
s = "TO BE OR NOT TO BE"
- 单词列表:
["TO", "BE", "OR", "NOT", "TO", "BE"] - 最长单词长度:3("NOT" 长度最大)
按行处理:
|
行号(i) |
取单词第 i 个字符 |
拼接结果(未去尾空格) |
去尾空格后结果 |
|
0 |
T B O N T B |
"TBONTB" |
"TBONTB" |
|
1 |
O E R O O E |
"OEROOE" |
"OEROOE" |
|
2 |
(空) (空) T |
" T " |
" T" |
返回:
[
"TBONTB",
"OEROOE",
" T"
]
总结
- 本题的核心是确定最长单词长度,然后按行遍历每个单词对应字符,补空格并去尾空格。
- 用 Python 的字符串方法
.rstrip()可以方便地处理尾部多余空格,满足题目要求。 - 代码实现简洁,效率足够。
- 这种竖直打印问题在面试和算法训练中较常见,掌握此类技巧对字符处理很有帮助。
更多推荐




所有评论(0)