https://leetcode-cn.com/problems/text-justification/
# -*- coding:utf-8 -*-
class Solution(object):
def fullJustify(self, words, maxWidth):
"""
:type words: List[str]
:type maxWidth: int
:rtype: List[str]
"""
def find_one_line(word_idx):
"""
寻找可以放在一行中的单词
:param word_idx:
:return:
"""
current_length = len(words[word_idx])
temp_str = words[word_idx]
# temp_list = [words[word_idx]]
word_idx += 1
if word_idx >= len(words):
res_list.append(temp_str)
return
# 挑选单词
while current_length + len(words[word_idx]) + 1 <= maxWidth:
temp_str = temp_str + ' ' + words[word_idx]
# temp_list.append(' ' + words[word_idx])
word_idx += 1
if word_idx >= len(words):
break
# current_length += len(words[word_idx])+1
current_length = len(temp_str)
res_list.append(temp_str)
if word_idx < len(words):
find_one_line(word_idx)
def check_space():
"""
检查处理空格
:return:
"""
# 处理前n行
for i in range(len(res_list) - 1):
current_length = len(res_list[i])
space_length = maxWidth - current_length
temp_cache = res_list[i].split(' ')
if len(temp_cache) - 1 > 0:
m, n = divmod(space_length, len(temp_cache) - 1)
for j in range(n):
temp_cache[j] = temp_cache[j] + ' ' * (m + 1 + 1)
for j in range(n, len(temp_cache) - 1):
temp_cache[j] = temp_cache[j] + ' ' * (m + 1)
else:
if space_length != 0:
m = 0
n = space_length - 1
temp_cache[0] = temp_cache[0] + ' ' * (m + n + 1)
else:
pass
res_str = ''
for j in range(len(temp_cache)):
res_str = res_str + temp_cache[j]
res.append(res_str)
# 处理最后一行
current_length = len(res_list[-1])
space_length = maxWidth - current_length
temp_cache = res_list[-1].split(' ')
for i in range(len(temp_cache) - 1):
temp_cache[i] = temp_cache[i] + ' '
temp_cache[-1] = temp_cache[-1] + ' ' * space_length
res_str = ''
for j in range(len(temp_cache)):
res_str = res_str + temp_cache[j]
res.append(res_str)
res_list = []
res = []
find_one_line(0)
check_space()
return res
if __name__ == '__main__':
words = ["What", "must", "be", "acknowledgment", "shall", "be"]
words = ["Science", "is", "what", "we", "understand", "well", "enough", "to", "explain", "to", "a", "computer.",
"Art", "is", "everything", "else", "we", "do"]
words = ["This", "is", "an", "example", "of", "text", "justification."]
words = ["Listen", "to", "many,", "speak", "to", "a", "few."]
maxWidth = 6
print(Solution().fullJustify(words, maxWidth))
思路:这道题首先筛选能在一行中出现的词,也就是判断如果加上这个词会不会超出maxWidth,然后根据当前行的长度来计算需要插入多少个空格,依次插入。
0 条评论