# LeetCode 068Text Justification

## LeetCode 068 Text Justification Problem

``````class Solution(object):
def fullJustify(self, words, maxWidth):
"""
:type words: List[str]
:type maxWidth: int
:rtype: List[str]
"""
res = []
res_list = []
curr = []
count, pos = 0, 0
while pos < len(words):
word = words[pos]
if len(word) > maxWidth:
pos += 1
if len(word) + count + len(curr)<= maxWidth:
count += len(word)
curr.append(word)
pos += 1
else:
res_list.append(curr)
curr = []
count = 0
if len(curr) > 0:
res_list.append(curr)
# print res_list
for index, curr in enumerate(res_list):
text = ''
remain = sum([len(t) for t in curr])
if len(curr) == 1:
# single word
text = curr + ' ' * (maxWidth - remain)
elif index == len(res_list) - 1:
# last line
text = ' '.join(curr)
text += ' ' * (maxWidth - remain - len(curr) + 1)
else:
# multiple
step = (maxWidth - remain) / (len(curr) - 1 )
extra = (maxWidth - remain) % (len(curr) - 1 )
for index in range(len(curr) - 1):
text += curr[index] + ' ' * step
if extra > 0:
# assign from left
text += ' '
extra -= 1
text += curr[-1]
res.append(text)
return res

# def fullJustify(self, words, maxWidth):
#     i, N, result = 0, len(words), []
#     while i < N:
#         # decide how many words to be put in one line
#         oneLine, j, currWidth, positionNum, spaceNum = [words[i]], i + 1, len(words[i]), 0, maxWidth - len(words[i])
#         while j < N and currWidth + 1 + len(words[j]) <= maxWidth:
#             oneLine.append(words[j])
#             currWidth += 1 + len(words[j])
#             spaceNum -= len(words[j])
#             positionNum, j = positionNum + 1, j + 1
#         i = j
#         # decide the layout of one line
#         if i < N and positionNum:
#             spaces = [' ' * (spaceNum / positionNum + (k < spaceNum % positionNum)) for k in range(positionNum)] + [
#                 '']
#         else:  # last line or the line only has one word
#             spaces = [' '] * positionNum + [' ' * (maxWidth - currWidth)]
#         result.append(''.join([s for pair in zip(oneLine, spaces) for s in pair]))
#     return result

if __name__ == '__main__':
s = Solution()
print s.fullJustify(["Don't","go","around","saying","the","world","owes","you","a","living;","the","world","owes","you","nothing;","it","was","here","first."],30)
``````