您的位置:首页 > 其它

【LeetCode】 -- 68.Text Justification

2016-03-23 20:43 387 查看
题目大意:给定一个数组容器,里面存有很多string; 一个int maxWith。让你均匀安排每一行的字符串,能够尽可能的均匀。

解题思路:字符串+贪心。一开始想复杂了,总觉的题意描述的不是很清楚,其实放到实际的场景中去,无非就是想让前端字符串布局变得更加美观,而设计的字符串对其方式(分散对齐)(如果每一行只有一个字符串的话,那么左对齐)。

附上代码:

  vector<string> fullJustify(vector<string>& words, int maxWidth)
{
vector<string> ans;
string rec = "";
int lenLine = words[0].length();
vector<int>wordId;
wordId.push_back(0);
for(int i = 1; i < words.size(); i ++){
if(lenLine + words[i].length() + 1 <= maxWidth){
lenLine += words[i].length() + 1;
wordId.push_back(i);
}else{
rec = "";
rec += words[wordId[0]];
if(wordId.size() == 1){
string spaces(maxWidth - rec.length(), ' ');
rec += spaces;
}else{
int totalLenOfWords = 0;
for(int j = 0; j < wordId.size(); j ++){
totalLenOfWords += words[wordId[j]].length();
}
int averageLenOfSpace = 0, leftLenOfSpace = 0;
averageLenOfSpace = (maxWidth - totalLenOfWords) / (wordId.size() - 1);
leftLenOfSpace = maxWidth - totalLenOfWords - averageLenOfSpace * (wordId.size() - 1);
for(int j = 1; j < wordId.size(); j ++){
string space(averageLenOfSpace, ' ');
rec += space;
if(leftLenOfSpace > 0){
rec += " ";
leftLenOfSpace --;
}
rec += words[wordId[j]];
}
}
ans.push_back(rec);
lenLine = words[i].length();
wordId.clear();
wordId.push_back(i);
}
}
if(wordId.size()){
rec = "";
rec += words[wordId[0]];
for(int j = 1; j < wordId.size(); j ++){
rec += " ";
rec += words[wordId[j]];
}
string spaces(maxWidth - rec.length(), ' ');
rec += spaces;
ans.push_back(rec);
}
return ans;
}


反思: 这道题的难点在于,要记得区分一种特殊状况:当该行只有一个word的时候。代码实现的速度还是比较慢,以后要速度解决这种没啥思维量的手速题。网易笔试告诉我:手速真的很重要。不要被外界因素干扰,心无旁骛的codeing。

最后:今天又看到了一个靠刷题算法逆袭成功的小硕,repeat my words: fuck all the leetcode problems and be a offer Harvester.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: