-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathJustifiedText.py
68 lines (60 loc) · 1.75 KB
/
JustifiedText.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# https://www.interviewbit.com/problems/justified-text/
def numExtraSpaces(arr, maxLen):
l = 0
for w in arr:
l += len(w)
return maxLen - l
def lineFromWords(arr, maxLen):
numSpaces = numExtraSpaces(arr, maxLen)
if len(arr) == 1:
arr[0] += " " * numSpaces
else:
w = 0
while numSpaces > 0:
arr[w] += " "
w = (w + 1) % (len(arr) - 1)
numSpaces -= 1
return "".join(arr)
def lastLineFromWords(arr, maxLen):
numSpaces = numExtraSpaces(arr, maxLen)
if len(arr) == 1:
arr[0] += " " * numSpaces
else:
for i in range(len(arr)):
if numSpaces == 0:
break
arr[i] += " "
numSpaces -= 1
arr[-1] += " " * numSpaces
return "".join(arr)
class Solution:
# @param A : list of strings
# @param B : integer
# @return a list of strings
def fullJustify(Self, A, B):
if not A:
return []
lines = []
i = 0
curLine = []
curLineLen = 0
while i < len(A):
if curLineLen + len(A[i]) == B:
curLine.append(A[i])
curLineLen += len(A[i])
elif curLineLen + len(A[i]) + 1 <= B:
curLine.append(A[i])
curLineLen += len(A[i]) + 1
else:
lines.append(curLine)
curLineLen = 0
curLine = []
continue
i += 1
if len(curLine) > 0:
lines.append(curLine)
result = []
for wordsArr in lines[:-1]:
result.append(lineFromWords(wordsArr, B))
result.append(lastLineFromWords(lines[-1], B))
return result