日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

每天一道LeetCode-----将单词数组分成多行,每行长度相同,单词之间用空格分隔,要求空格尽量均匀分布

發布時間:2024/4/19 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 每天一道LeetCode-----将单词数组分成多行,每行长度相同,单词之间用空格分隔,要求空格尽量均匀分布 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Text Justification

原題鏈接Text Justification

將以這個字符串數組重組成幾行,每個字符串用空格分隔,要求

  • 每行的長度相同
  • 每行的空格需要均勻分配,且每個單詞之間至少有一個空格
  • 最后一行盡量將空格放在最后面

首先思路是記錄已遍歷到的單詞的總長度,判斷是否還能容納當前遍歷到的這個單詞。

  • 如果能,即之前總長度加上這個單詞長度以及一個分隔空格沒有超過規定長度,繼續遍歷下一個
  • 如果不能,那么就將之前遍歷到的所有單詞組成一行,改行需要滿足上面三個約束

可以用兩個下標指針記錄當前遍歷到的單詞,[front, back)表示這個范圍的單詞可以組成一行,而加上back后則不能。

難點在計算每個單詞之間空格的數量,均勻分布空格的意思是

  • 假設保證每塊空格長度相同的前提下還剩余n個空格,那么就將前n塊空格的每個空格長度加一

[front, back)表示這個范圍有back - front - 1個單詞,len記錄這個范圍的長度(注,這個長度計算了一個空格在里面,即每個單詞之間至少有一個空格,這個空格長度計算在len中了)
那么每個單詞之間均勻的空格數應該是(maxWidth - len) / (back - front - 1) + 1
+1表示將len中記錄的用于分隔的單詞加上

但是,對于最后一行,因為要保證空格盡量在后面,其實就是保證每個單詞之間只能有一個空格。
所以計算單詞之間空格數量的方法為

int spaces = 1; if(back != words.size() && back != front + 1) {spaces = (maxWidth - len) / (back - front - 1) + 1; }

如果back == front + 1,說明這一行只有一個單詞,那么分隔為1即可

除了每個單詞均勻的空格數之外,如果剩余n個空格,那么需要將前n個空格塊每一個都增加一個空格。計算這個n的方法其實就是計算剩余多少個空格

int spaces = 1; int extra = 0; if(back != words.size() && back != front + 1) {spaces = (maxWidth - len) / (back - front - 1) + 1;extra = (maxWidth - len) % (back - front - 1); }

找到了每個空格塊的數量,就可以組成一行的字符串了。不過要注意前extra個空格快的空格數量是spaces + 1
先處理一行中前extra個空格塊

res.emplace_back(words[front++]); while(extra--) {res.back().append(spaces+1, ' ');res.back().append(words[front++]); }

再處理該行剩下的空格塊

while(front < back) {res.back().append(spaces, ' ');res.back().append(words[front++]); }

此時,這一行字符的總數量已經是maxWidth了,但是考慮到最后一行的情況,上述的space是1而extra為0,追加一遍之后總數量不是maxWidth,因為要將空格盡量放在后面,所以這里需要將剩余的空格追加上

res.back().append((maxWidth - res.back().size()), ' ');

完整代碼如下

class Solution { public:vector<string> fullJustify(vector<string>& words, int maxWidth) {vector<string> res;int back = 0;while(back < words.size()){int front = back;int len = words[back++].size();while(back < words.size() && len + 1 + words[back].size() <= maxWidth){len += 1 + words[back].size();++back;}int spaces = 1;int extra = 0;if(back != words.size() && back != front + 1){spaces = (maxWidth - len) / (back - front - 1) + 1;extra = (maxWidth - len) % (back - front - 1);}res.emplace_back(words[front++]);while(extra--){res.back().append(spaces+1, ' ');res.back().append(words[front++]);}while(front < back){res.back().append(spaces, ' ');res.back().append(words[front++]);}res.back().append((maxWidth - res.back().size()), ' ');}return res;} };

本題主要難點在確定空格數,邏輯上用while比for循環清晰不少

總結

以上是生活随笔為你收集整理的每天一道LeetCode-----将单词数组分成多行,每行长度相同,单词之间用空格分隔,要求空格尽量均匀分布的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人久久精品人妻一区二区三区 | 天天天天天天天干 | 精品视频日韩 | 日韩h在线观看 | 亚洲AV无码成人精品一区 | 国产成人精品一区二区三区四区 | 蜜桃视频无码区在线观看 | 玉势 (1v1 高h) | 亚洲综合情 | 91视频看片 | 偷拍第一页 | 日韩黄色影院 | 丝袜人妻一区二区三区 | 交视频在线播放 | 麻豆国产一区二区三区四区 | 老外毛片| 99在线免费观看视频 | 都市激情亚洲一区 | 国产伊人自拍 | 国产任你操 | 激情成人综合 | 欧美日韩免费视频 | 成人国产精品免费观看视频 | 天天插天天搞 | 水蜜桃色314在线观看 | 欧美性色黄大片手机版 | 91免费看国产 | 一道本不卡视频 | 婷婷色中文字幕 | 国产伦精品免费视频 | 久久99视频 | 久久伊人影院 | 在线视频第一页 | 成年人在线视频免费观看 | 三度诱惑免费版电影在线观看 | 五月99久久婷婷国产综合亚洲 | 浓精喷进老师黑色丝袜在线观看 | 在线免费观看视频你懂的 | 99久久免费精品 | 黄色小视频在线看 | 瑟瑟久久| 国产精品毛片久久久久久久av | 欧美成免费 | 欧美一区二区三区大屁股撅起来 | 少妇av导航 | 一区www| 久久精品aaaaaa毛片 | 337p日本欧洲亚洲大胆张筱雨 | 在线国产区 | 黄色片aa| 动漫美女隐私无遮挡 | 亚洲色精品三区二区一区 | 99ri精品 | 久久国产精品偷 | 91国内揄拍国内精品对白 | 加勒比视频在线观看 | 最新国产在线视频 | 欧美αv| 婷婷精品视频 | 黄色录像网址 | 亚洲欧美高清视频 | 98av视频| 伊人久久久久噜噜噜亚洲熟女综合 | 国产精品成人免费精品自在线观看 | 最新国产在线视频 | 艳妇臀荡乳欲伦交换在线看 | 一区二区三区黄色 | 就去色av | 亚洲图色在线 | 久久久国产精华液999999 | 天天干干| 四虎影视精品 | 一区二区不卡视频在线观看 | 在线视频h | 伊人春色在线观看 | 国产激情啪啪 | 台湾佬美性中文网 | 玖玖爱精品 | 亚洲自拍偷拍网 | 亚洲一区二区不卡在线观看 | 一级做a爱片久久毛片 | 九九视频免费 | 99香蕉网 | 美女啪啪动态图 | 蜜桃久久av| 91成人免费观看 | 韩国av三级 | 久久一区二区三区四区五区 | 亚洲一区在线播放 | 国产色频 | 亚洲第8页 | 国产黄色大片 | 在线观看www | 免费69视频| 亚洲精品国产精品乱码 | 成人夜夜 | 亚洲国产精品视频一区 | 久久久久久无码午夜精品直播 | 一本加勒比波多野结衣 |