vector<string> fullJustify(vector<string>& words, int maxWidth) {
vector<string> rs;
int L = maxWidth;
//得预先判断后一个单词的长度对,数组行长度的影响,j=i+1
for(int i=0 ; i<words.size(); )
//i固定在每行开头的单词,只有执行最后一步才换行i才加一
{
int j = i+1;
//判断普通行的多个单词的插入情况,每加一个单词都在 原行长度len = words[i].length() 上加上单词长度
int len = words[i].length();
for(;j<words.size() && len+words[j].length()<L;j++){
//更新len长度:+空格+单词长度
len += 1+words[j].length();
}
//判断最后一个单词的情况:可以直接在最后一行加入它
if(j==words.size())
{
string s_cur(words[i]);
for(i+=1;i<j;i++) s_cur +=" "+words[i]; //加上之前的所有单词后,再判断新单词加入后长度和L的关系
//int len_end = s_cur.length()+1+words[j].size();
//if(len_end > L){//加上后溢出的话,则补上空格不加单词
while(s_cur.length()<L) s_cur.push_back(' ');
rs.push_back(s_cur);
//string s_end(words[j]);
//rs.push_back(s_end);
return rs;
}
//执行for循环后,改行的j-i=1即改行只有一个单词时,补全空格
if(j-i==1){
rs.push_back(words[i++]);
rs.back().append(L-rs.back().length(), ' ');//补全每行长度 减去 当前行长度的空格个数
continue;
}
//普通行最后的空格插入,多少个单词空隙?(j-i-1)需要插入多少空格(L-len),每个空隙插入多少空格(L-len)/(j-i-1)?
int a = (L-len) / (j-i-1) + 1;//多少个单词间空隙,空隙多少个空格
int b = (L-len) % (j-i-1); //第一个空隙补足空格数
string s(words[i]);
for (i++; i < j; i++, b--)
{
s.append(a,' ');
if (b>0) s.push_back(' ');
s.append(words[i]);
}
rs.push_back(s);
}
return rs;
}
Leetcode 68. Text Justification
最新推荐文章于 2024-04-24 23:48:40 发布