[LeetCode] Text Justification

The key to this problem is to identify all the words that can be added to a line and then identify the places that require an additional space (to make the spaces as even as possible, we can only add an additional space if needed). This link has a brilliant solution that has a nice formula for the places that require an addtional space. The code is written as follows.

复制代码
 1 class Solution {
 2 public:
 3     vector<string> fullJustify(vector<string>& words, int maxWidth) {
 4         int idx = 0, n = words.size();
 5         vector<string> justifications;
 6         while (idx < n) {
 7             int width = 0, numWords = 0;
 8             while (idx + numWords < n && width + words[idx + numWords].length() <= maxWidth - numWords) {
 9                 width += words[idx + numWords].length();
10                 numWords++;
11             }
12             string justification = words[idx];
13             for (int j = 0; j < numWords - 1; j++) {
14                 if (idx + numWords == n) justification += " ";
15                 else justification += string((maxWidth - width) / (numWords - 1) + (j < (maxWidth - width) % (numWords - 1)), ' ');
16                 justification += words[idx + j + 1];
17             }
18             justification += string(maxWidth - justification.length(), ' ');
19             justifications.push_back(justification);
20             idx += numWords;
21         }
22         return justifications;
23     }
24 };
复制代码

 

posted @   jianchao-li  阅读(235)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示