Monday, August 17, 2015

Leetcode 68. Text Justification

https://leetcode.com/problems/text-justification/

This problem is not very hard to think, while we need to pay attentions to details and corner cases.

Solution:
# T:O(n) S:O(1)
class Solution:
    # @param {string[]} words
    # @param {integer} maxWidth
    # @return {string[]}
    def fullJustify(self, words, maxWidth):
        L, N, wordLen, ret, i, j = maxWidth, len(words), [], [], 0, 0
        for word in words:
            wordLen.append(len(word))
        if not words: return []
        while j < N:
            i = j + 1
            total = wordLen[j]   
            # total indicates len of words that can be put in this line
            while i < N  and total + wordLen[i] < L:
                total += wordLen[i] + 1   
                # already insert 1 space between words
                i += 1
            numOfExtraSpace = L - total
            numOfWords = i - j
            temp = words[j]
            if numOfWords == 1:
                ret.append(temp+' '*(L-wordLen[j]))
                j += 1
            else:
                if i == N:
                    while numOfWords > 1:
                        temp += ' ' + words[j + 1]
                        j += 1
                        numOfWords -= 1
                    ret.append(temp + ' '*numOfExtraSpace)
                    return ret
                each = numOfExtraSpace/(numOfWords-1)
                left = numOfExtraSpace % (numOfWords-1)
                while numOfWords > 1:
                    if left > 0:
                        temp += ' '*(each+2) + words[j + 1]
                        left -= 1
                    else:
                        temp += ' '*(each+1) + words[j + 1]
                    j += 1
                    numOfWords -= 1
                ret.append(temp)
                j += 1
        return ret
Run Time: 44 ms

No comments:

Post a Comment