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;
}
}
本文详细解析了Java代码实现的文本对齐算法,包括如何在给定宽度下将单词组合成多行,并确保每行文本尽可能美观且均匀。通过实例演示,读者可以轻松理解并应用此算法于文本编辑、网页布局或任何需要文本对齐的场景。
140

被折叠的 条评论
为什么被折叠?



