1324-竖直打印单词
给你一个字符串 s
。请你按照单词在 s
中的出现顺序将它们全部竖直返回。
单词应该以字符串列表的形式返回,必要时用空格补位,但输出尾部的空格需要删除(不允许尾随空格)。
每个单词只能放在一列上,每一列中也只能有一个单词。
示例 1:
**输入:** s = "HOW ARE YOU"
**输出:** ["HAY","ORO","WEU"]
**解释:** 每个单词都应该竖直打印。
"HAY"
"ORO"
"WEU"
示例 2:
**输入:** s = "TO BE OR NOT TO BE"
**输出:** ["TBONTB","OEROOE"," T"]
**解释:** 题目允许使用空格补位,但不允许输出末尾出现空格。
"TBONTB"
"OEROOE"
" T"
示例 3:
**输入:** s = "CONTEST IS COMING"
**输出:** ["CIC","OSO","N M","T I","E N","S G","T"]
提示:
1 <= s.length <= 200
s
仅含大写英文字母。- 题目数据保证两个单词之间只有一个空格。
方法一:模拟
我们只需要顺着题目的要求进行模拟即可:
第一步:将字符串
s
进行分词。在Python
中可以直接使用split()
函数对字符串进行分词,而在C++
中没有相关的函数,但可以借助std::stringstream
类,将字符串s
作为输入流,从中依次读取单词;第二步:统计最长的单词长度。对于我们返回的字符串列表,它的长度等于最长的单词长度,其中每个元素的长度等于单词的数量;
第三步:得到字符串列表中的每个元素。对于字符串列表中的第
i
个元素,它由所有单词的第i
个字母组成。我们依次遍历所有的单词,若单词中有第i
个字母,则将该字母加入元素的末尾;若没有第i
个字母,则将空格加入元素的末尾;第四步:去除尾随空格。在
Python
中可以直接使用rstrip()
函数去除尾随空格,而在C++
中没有相关的函数,可以使用循环将字符串末尾的空格依次弹出,或使用string::find_last_not_of()
函数找到字符串最右侧的非空格字符,再使用string::substr()
函数得到不包含尾随空格的字符串。
1 | class Solution { |
1 | class Solution: |
1 | class Solution: |
复杂度分析
时间复杂度:O(N\max(|S|)),其中 N 是字符串
s
中的单词个数,\max(|S|) 是最长的单词长度。空间复杂度:O(N\max(|S|))。
Comments