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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

算法:文本左右对齐

發(fā)布時(shí)間:2025/6/15 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法:文本左右对齐 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目

給定一個(gè)單詞數(shù)組和一個(gè)長(zhǎng)度 maxWidth,重新排版單詞,使其成為每行恰好有 maxWidth 個(gè)字符,且左右兩端對(duì)齊的文本。

你應(yīng)該使用“貪心算法”來放置給定的單詞;也就是說,盡可能多地往每行中放置單詞。必要時(shí)可用空格 ’ ’ 填充,使得每行恰好有 maxWidth 個(gè)字符。

要求盡可能均勻分配單詞間的空格數(shù)量。如果某一行單詞間的空格不能均勻分配,則左側(cè)放置的空格數(shù)要多于右側(cè)的空格數(shù)。

文本的最后一行應(yīng)為左對(duì)齊,且單詞之間不插入額外的空格。

說明:

  • 單詞是指由非空格字符組成的字符序列。
  • 每個(gè)單詞的長(zhǎng)度大于 0,小于等于 maxWidth。
  • 輸入單詞數(shù)組 words 至少包含一個(gè)單詞。

示例:

輸入: words = ["This", "is", "an", "example", "of", "text", "justification."] maxWidth = 16 輸出: ["This is an","example of text","justification. " ] //文本左右對(duì)齊1.盡可能多的在每行放置更多的單詞,必要時(shí)用' '填充 2.要求更可能均勻的分配單詞間空格的數(shù)量,如果某一行不能均勻分配,那左側(cè)放置的空格數(shù)要多于右側(cè) 3.文本最后一行要左對(duì)齊,且單詞之間不能插入額外的空格string fillWords(vector<string>& words, int bg, int ed, int maxWidth, bool lastLine = false){//單詞數(shù)量int wordCount = ed - bg + 1;int spaceCount = maxWidth + 1 - wordCount; // 除去每個(gè)單詞尾部空格, + 1 是最后一個(gè)單詞的尾部空格的特殊處理for (int i = bg; i <= ed; i++){spaceCount -= words[i].size(); // 除去所有單詞的長(zhǎng)度}//spaceCount是剩下的總空格數(shù)int spaceSuffix = 1; // 詞尾空格int spaceAvg = (wordCount == 1) ? 1 : spaceCount / (wordCount - 1); // 額外空格的平均值int spaceExtra = (wordCount == 1) ? 0 : spaceCount % (wordCount - 1); // 額外空格的余數(shù)string ans;for (int i = bg; i < ed; i++){ans += words[i]; // 填入單詞if (lastLine) // 特殊處理最后一行{fill_n(back_inserter(ans), 1, ' ');continue;}fill_n(back_inserter(ans), spaceSuffix + spaceAvg + ((i - bg) < spaceExtra), ' '); // 根據(jù)計(jì)算結(jié)果補(bǔ)上空格}ans += words[ed]; // 填入最后一個(gè)單詞fill_n(back_inserter(ans), maxWidth - ans.size(), ' '); // 補(bǔ)上這一行最后的空格return ans; }//每行有maxWidth字符,包括空格 vector<string> fullJustify(vector<string>& words, int maxWidth) {vector<string> ans;int cnt = 0;int bg = 0;for (int i = 0; i < words.size(); i++){cnt += words[i].size() + 1;if (i + 1 == words.size() || cnt + words[i + 1].size() > maxWidth){ // 如果是最后一個(gè)單詞,或者加上下一個(gè)詞就超過長(zhǎng)度了,即可湊成一行ans.push_back(fillWords(words, bg, i, maxWidth, i + 1 == words.size()));bg = i + 1;cnt = 0;}}return ans; }

鏈接:https://leetcode-cn.com/problems/text-justification/solution/text-justification-by-ikaruga/

總結(jié)

以上是生活随笔為你收集整理的算法:文本左右对齐的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。