Text Justification
2015-06-26 00:51
316 查看
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
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:
L:
Return the formatted lines as:
Note: Each word is guaranteed not to exceed L in length.
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.
class Solution { public: vector<string> fullJustify(vector<string>& words, int maxWidth) { vector<string> result; int n = words.size(); int left = 0; int right = 0; int num = 0; int len = 0; for (int i = 0; i < n;) { if (num == 0) { left = i; right = i; num = 1; len = words[i].length(); if (i == n-1) { break; } i++; } else { if (len+num+words[i].length() <= maxWidth) { right = i; num += 1; len += words[i].length(); if (i == n-1) { break; } i++; } else { string temp; int spaceNum = maxWidth-len; if (num == 1) { string pad(spaceNum, ' '); temp = words[left] + pad; } else { int everySpaceNum = spaceNum/(num-1); int firstSpaceNum = spaceNum - (num-2)*everySpaceNum; string everyPad(everySpaceNum, ' '); int offset = firstSpaceNum - everySpaceNum; if (offset > 0) { string pad(everySpaceNum+1, ' '); for (int i = 0; i < offset; i++) { temp += words[left+i] + pad; } } for (int i = left+offset; i < right; i++) { temp += words[i] + everyPad; } temp += words[right]; } result.push_back(temp); num = 0; } } } if (num > 0) { string temp; if (num == 1) { string pad(maxWidth-len, ' '); temp = words[left] + pad; } else { for (int i = left; i < right; i++) { temp += words[i] + ' '; } temp += words[right]; int totalLen = len + num - 1; if (maxWidth > totalLen) { string pad(maxWidth-totalLen, ' '); temp += pad; } } result.push_back(temp); } return result; } };
相关文章推荐
- gensim的主题模型LSI
- 减小Sybase ASA数据库的数据和事务日志文件大小及分离的方法
- xarmain使用Forms编译android工程出现support_r19.0.1.zip支持包错误
- TrueCrypt 7.1a Hashes
- 史上最全的Formula one的属性与方法
- 实验五
- LeetCode——Largest Number
- 个人applicationthread解惑
- Android中的Activity常见样式
- 实验四
- 黑马程序员——Java基础---集合(Set接口及其子类、Map接口及其子类)
- MFC对话框程序中Shift+F9键的检测
- g++ 包含库问题
- MyEclipse+MVC(Struts)实现登录验证(含工程源码)
- java实现线程池
- workerman & swoole
- JavaScript + CSS3 实现的海报画廊特效
- IOS关于异步请求学习
- cocos2d-x3.6 连连看随机地图实现
- javascript中外部js文件取得自身完整路径得办法