Text Justification 文本对齐 @LeetCode
来源:互联网 发布:三菱plc仿真软件 编辑:程序博客网 时间:2024/05/29 17:38
快被这道题搞死了。。
根据这篇重写了 http://www.cnblogs.com/TenosDoIt/p/3475275.html
分析:这一题需要注意两个点,a、当该行只放一个单词时,空格全部在右边 b、最后一行中单词间只有一个空格,其余空格全部在右边。然后只要贪心选择,在一行中尽量放多的单词。
package Level4;import java.util.ArrayList;/**Text Justification Given an array of words and a length L, format the text such that each line has exactly L characters and is fully (left and right) justified.You should pack your words in a greedy approach; that is, pack as many words as you can in each line. Pad extra spaces ' ' when necessary so that each line has exactly L characters.Extra spaces between words should be distributed as evenly as possible. If the number of spaces on a line do not divide evenly between words, the empty slots on the left will be assigned more spaces than the slots on the right.For the last line of text, it should be left justified and no extra space is inserted between words.For example,words: ["This", "is", "an", "example", "of", "text", "justification."]L: 16.Return the formatted lines as:[ "This is an", "example of text", "justification. "]Note: Each word is guaranteed not to exceed L in length.click to show corner cases. */public class S68 {public static void main(String[] args) { String[] words = {"This", "is", "an", "example", "of", "text", "justification."};// String[] words = {""};// String[] words = {"What","must","be","shall","be."};//String[] words = { "" };int L = 16;System.out.println(fullJustify(words, L));}public static ArrayList<String> fullJustify(String[] words, int L) {ArrayList<String> ret = new ArrayList<String>();int wordsLen = words.length;// 单词数组的长度int curWordIdx = 0;// 处理第i个单词while(curWordIdx < wordsLen){// 处理完所有单词后退出int charLen = 0; // 当前行累积的字符数量int probeWordIdx = curWordIdx;while(probeWordIdx<wordsLen && charLen+words[probeWordIdx].length()<=L){// 贪婪加入尽可能多的单词charLen += ((words[probeWordIdx++]).length()+1);// 累积单词长度和至少要有一个空格}if(probeWordIdx-curWordIdx == 1){// tmpWordIdx-curWordIdx: 该行放入单词的数目,如果只有一个单词要特殊处理String tmp = words[curWordIdx];// 唯一的那个单词tmp = addSpace(tmp, L-words[curWordIdx].length());// 那个单词后面都接上空格ret.add(tmp);curWordIdx = probeWordIdx;// 更新curWordIdx,因为已经处理好当前行了continue;}// tmpWordIdx-curWordIdx: 该行放入单词的数目,也就是紧接的空格的数量(因为每个单词后接一个空格)// wordCharLen:当前行所有由单词组成的字符数量(不包括空格)int wordCharLen = charLen - (probeWordIdx-curWordIdx);//meanSpace: 平均每个单词后的空格,tmpWordIdx<wordsLen 表示不是最后一行int meanSpace = probeWordIdx<wordsLen ? (L-wordCharLen)/(probeWordIdx-curWordIdx-1) : 1;//leftSpace: 多余的空格int leftSpace = probeWordIdx<wordsLen ? (L-wordCharLen)%(probeWordIdx-curWordIdx-1) : L-wordCharLen-(probeWordIdx-curWordIdx-1);String tmp = new String();for(int k=curWordIdx; k<probeWordIdx-1; k++){// 对当前行最后一个单词特殊处理tmp += words[k];tmp = addSpace(tmp, meanSpace);if(probeWordIdx<wordsLen && leftSpace>0){// 因为居中对齐tmp += " ";leftSpace--;}}tmp += words[probeWordIdx-1];// 处理当前行的最后一个单词if(leftSpace > 0){// 因为左对齐,所以在最后补上剩下的空格tmp = addSpace(tmp, leftSpace);}ret.add(tmp);curWordIdx = probeWordIdx;// 处理下一行的要处理的单词}return ret;}public static String addSpace(String s, int count){for(int i=1; i<=count; i++){s += " ";}return s;}// ============================================// Bad attempt!//public static ArrayList<String> fullJustify2(String[] words, int L) {//int letterCnt = 0;//int wordCnt = 0;//for (String s : words) {//letterCnt += s.length(); // 计算字符总数//}////ArrayList<String> ret = new ArrayList<String>();//// if(L != 1){//// cnt = cnt + cnt-1;//// }//// System.out.println(cnt);//// int lines = (int) Math.ceil(1.0*cnt/L);//// System.out.println(lines);////int curWord = 0;//int oldWord = 0;//int totalWords = words.length;//while (true) {//letterCnt = 0;//wordCnt = 0;//curWord = oldWord;//while (curWord < words.length) {//letterCnt += words[curWord].length() + 1;//if (letterCnt > L + 1) { // 超过长度限制//break;//}//wordCnt += words[curWord].length(); // 计算总共单词个数//curWord++;//}//curWord--;//String s = "";//// System.out.println(wordCnt);//int totalSpaces = L - wordCnt; // 空格总数//int perSpaces = 0; // 每行的空格数目s//// if(j-oldj != 0){//perSpaces = (int) Math.ceil(1.0 * (L - wordCnt)/// ((curWord - oldWord + 1) - 1));//// }////if (totalWords <= 0) {//break;//}//// System.out.println("totalSpaces:"+totalSpaces);//// System.out.println("perSpaces:"+perSpaces);//for (int k = oldWord; k <= curWord; k++) {//s += words[k];//if (totalWords == L && k == oldWord && totalSpaces != 0) {//s += " ";//totalSpaces -= 1;//} else {//if (perSpaces <= totalSpaces) {//for (int m = 0; m < perSpaces; m++) {//s += " ";//}//totalSpaces -= perSpaces;//} else {//for (int m = 0; m < totalSpaces; m++) {//s += " ";//}//totalSpaces -= totalSpaces;//}//}//}////totalWords -= (curWord - oldWord + 1);////ret.add(s);//oldWord = curWord + 1;//}//return ret;//}}
0 0
- Text Justification 文本对齐 @LeetCode
- LeetCode 68. Text Justification(文本对齐)
- leetcode 68. Text Justification 文本对齐
- LeetCode OJ 之 Text Justification(文本对齐)
- Leetcode 68. Text Justification 文本调整 解题报告
- LeetCode : Text Justification
- [LeetCode] Text Justification
- leetcode 103: Text Justification
- [LeetCode]Text Justification
- [leetcode] Text Justification
- Text Justification leetcode
- Leetcode: Text Justification
- leetcode Text Justification
- LeetCode Text Justification
- LeetCode | Text Justification
- LeetCode Text Justification
- [Leetcode] Text Justification (Java)
- LeetCode OJ:Text Justification
- raid10&raid01&raid5比较分析
- !!!Obj-c on Mac --- Chapter 5 ~ 7
- NLP coursera note 1
- paip.解决问题Unable to access jarfile E:\resin-4.0.22\lib\resin.jar
- 20131221-第十四天
- Text Justification 文本对齐 @LeetCode
- paip. java resin 远程 调试 java resin remote debug
- update-rc.d命令
- Blue Path(基于cocos2dx 3.0)
- iOS 图片相关操作,如:翻转、缩放、截取等
- SNMP--Windows API--SnmpExtensionQuery
- github 访问超时使用goagent解决方案
- 简约至上-交互设计四策略之一组织
- Efficient sparse coding algorithm_(阅读笔记)