http://oj.leetcode.com/problems/text-justification/
public class LEET_Text_Justification {
public static void main(String[] args) {
LEET_Text_Justification m = new LEET_Text_Justification();
String[] words = new String[] { "This" };
System.out.println(m.fullJustify(words, 16));
words = new String[] { "1234567890123456" };
System.out.println(m.fullJustify(words, 16));
words = new String[] { "1234567890", "12345" };
System.out.println(m.fullJustify(words, 16));
words = new String[] { "This", "is", "an", "example", "of", "text", "justification." };
System.out.println(m.fullJustify(words, 16));
words = new String[] { "This", "is", "an", "example", "of" };
System.out.println(m.fullJustify(words, 16));
}
public ArrayList<String> fullJustify(String[] words, int L) {
ArrayList<String> result = new ArrayList<String>();
int sumChecker = 0;
int sum = 0;
int count = 0;
int index = 0;
while (index < words.length) {
sumChecker += words[index].length();
if (sumChecker > L) {
StringBuilder sb = new StringBuilder();
if (count == 1) {
sb.append(words[index - 1]);
while (sb.length() < L) {
sb.append(" ");
}
} else {
int spaceNum = (L - sum) / (count - 1) + 1;
int additionalSpace = (L - sum) % (count - 1);
for (int j = 0; j < count; j++) {
sb.append(words[index - count + j]);
if (j < count - 1) {
for (int k = 0; k < spaceNum; k++) {
sb.append(" ");
}
if (j < additionalSpace) {
sb.append(" ");
}
}
}
}
result.add(sb.toString());
sum = 0;
sumChecker = 0;
count = 0;
continue;
}
sum = sumChecker;
++sumChecker; // a blank space
++count;
++index;
}
StringBuilder sb = new StringBuilder();
for (int j = 0; j < count; j++) {
sb.append(words[index - count + j]);
if (j < count - 1) {
sb.append(" ");
}
}
while (sb.length() < L) {
sb.append(" ");
}
result.add(sb.toString());
return result;
}
}