欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++實現(xiàn)LeetCode(68.文本左右對齊)

 更新時間:2021年07月17日 08:40:58   作者:Grandyang  
這篇文章主要介紹了C++實現(xiàn)LeetCode(68.文本左右對齊),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下

[LeetCode] 68.Text Justification 文本左右對齊

Given an array of words and a width maxWidth, format the text such that each line has exactly maxWidth 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 maxWidthcharacters.

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 extraspace is inserted between words.

Note:

  • A word is defined as a character sequence consisting of non-space characters only.
  • Each word's length is guaranteed to be greater than 0 and not exceed maxWidth.
  • The input array words contains at least one word.

Example 1:

Input:
words = ["This", "is", "an", "example", "of", "text", "justification."]
maxWidth = 16
Output:
[
"This    is    an",
"example  of text",
"justification.  "
]

Example 2:

Input:
words = ["What","must","be","acknowledgment","shall","be"]
maxWidth = 16
Output:
[
"What   must   be",
"acknowledgment  ",
"shall be        "
]
Explanation: Note that the last line is "shall be    " instead of "shall     be",
because the last line must be left-justified instead of fully-justified.
Note that the second line is also left-justified becase it contains only one word.

Example 3:

Input:
words = ["Science","is","what","we","understand","well","enough","to","explain",
"to","a","computer.","Art","is","everything","else","we","do"]
maxWidth = 20
Output:
[
"Science  is  what we",
"understand      well",
"enough to explain to",
"a  computer.  Art is",
"everything  else  we",
"do                  "
]

我將這道題翻譯為文本的左右對齊是因為這道題像極了word軟件里面的文本左右對齊功能,這道題我前前后后折騰了快四個小時終于通過了OJ,完成了之后想著去網(wǎng)上搜搜看有沒有更簡單的方法,搜了一圈發(fā)現(xiàn)都差不多,都挺復(fù)雜的,于是乎就按自己的思路來說吧,由于返回的結(jié)果是多行的,所以我們在處理的時候也要一行一行的來處理,首先要做的就是確定每一行能放下的單詞數(shù),這個不難,就是比較n個單詞的長度和加上n - 1個空格的長度跟給定的長度L來比較即可,找到了一行能放下的單詞個數(shù),然后計算出這一行存在的空格的個數(shù),是用給定的長度L減去這一行所有單詞的長度和。得到了空格的個數(shù)之后,就要在每個單詞后面插入這些空格,這里有兩種情況,比如某一行有兩個單詞"to" 和 "a",給定長度L為6,如果這行不是最后一行,那么應(yīng)該輸出"to   a",如果是最后一行,則應(yīng)該輸出 "to a  ",所以這里需要分情況討論,最后一行的處理方法和其他行之間略有不同。最后一個難點就是,如果一行有三個單詞,這時候中間有兩個空,如果空格數(shù)不是2的倍數(shù),那么左邊的空間里要比右邊的空間里多加入一個空格,那么我們只需要用總的空格數(shù)除以空間個數(shù),能除盡最好,說明能平均分配,除不盡的話就多加個空格放在左邊的空間里,以此類推,具體實現(xiàn)過程還是看代碼吧:

class Solution {
public:
    vector<string> fullJustify(vector<string> &words, int L) {
        vector<string> res;
        int i = 0;
        while (i < words.size()) {
            int j = i, len = 0;
            while (j < words.size() && len + words[j].size() + j - i <= L) {
                len += words[j++].size();
            }
            string out;
            int space = L - len;
            for (int k = i; k < j; ++k) {
                out += words[k];
                if (space > 0) {
                    int tmp;
                    if (j == words.size()) { 
                        if (j - k == 1) tmp = space;
                        else tmp = 1;
                    } else {
                        if (j - k - 1 > 0) {
                            if (space % (j - k - 1) == 0) tmp = space / (j - k - 1);
                            else tmp = space / (j - k - 1) + 1;
                        } else tmp = space;
                    }
                    out.append(tmp, ' ');
                    space -= tmp;
                }
            }
            res.push_back(out);
            i = j;
        }
        return res;
    }
};

到此這篇關(guān)于C++實現(xiàn)LeetCode(68.文本左右對齊)的文章就介紹到這了,更多相關(guān)C++實現(xiàn)文本左右對齊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言大作業(yè)之圖書管理系統(tǒng)的實現(xiàn)詳程

    C語言大作業(yè)之圖書管理系統(tǒng)的實現(xiàn)詳程

    隨著網(wǎng)絡(luò)技術(shù)的高速發(fā)展,計算機應(yīng)用的普及,利用計算機對圖書館的日常工作進行管理勢在必行,趁著寒假時間手把手帶你用C語言實現(xiàn)一個圖書管理系統(tǒng),大家可以在過程中查缺補漏,提升水平
    2022-01-01
  • 用C++面向?qū)ο蟮姆绞絼討B(tài)加載so的方法

    用C++面向?qū)ο蟮姆绞絼討B(tài)加載so的方法

    下面小編就為大家?guī)硪黄肅++面向?qū)ο蟮姆绞絼討B(tài)加載so的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • C++模擬如何實現(xiàn)vector

    C++模擬如何實現(xiàn)vector

    這篇文章主要介紹了C++模擬如何實現(xiàn)vector問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 詳解C++中的ANSI與Unicode和UTF8三種字符編碼基本原理與相互轉(zhuǎn)換

    詳解C++中的ANSI與Unicode和UTF8三種字符編碼基本原理與相互轉(zhuǎn)換

    在C++編程中,我們有時需要去處理字符串編碼的相關(guān)問題,常見的字符編碼有ANSI窄字節(jié)編碼、Unicode寬字節(jié)編碼及UTF8可變長編碼。很多人在處理字符串編碼問題時都會有疑惑,即便是有多年工作經(jīng)驗的朋友也可能搞不清楚。所以有必要講一下這三種字符編碼以及如何去使用它們
    2021-11-11
  • C++詳細講解圖的拓撲排序

    C++詳細講解圖的拓撲排序

    拓撲排序(Topological?Sorting)若一個由圖中所有點構(gòu)成的序列?A?滿足:對于圖中的每條邊?(x,y),x?在?A?中都出現(xiàn)在?y?之前,則稱?A?是該圖的一個拓撲序列
    2022-05-05
  • C++ 遞歸遍歷文件并計算MD5的實例代碼

    C++ 遞歸遍歷文件并計算MD5的實例代碼

    在本篇文章里小編給大家整理的是一篇關(guān)于C++ 遞歸遍歷文件并計算MD5的實例代碼,有興趣的朋友們可以學(xué)習(xí)參考下。
    2021-07-07
  • 淺談C++模板元編程

    淺談C++模板元編程

    本篇文章主要介紹了淺談C++模板元編程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • C++Stack棧類模版實例詳解

    C++Stack棧類模版實例詳解

    這篇文章主要為大家詳細介紹了C++Stack棧類模版實例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C++回溯算法廣度優(yōu)先搜索舉例分析

    C++回溯算法廣度優(yōu)先搜索舉例分析

    回溯在迷宮搜索中使用很常見,就是這條路走不通,然后返回前一個路口,繼續(xù)下一條路。回溯算法說白了就是窮舉法,下面讓我們一起來看看吧
    2022-03-03
  • C++學(xué)習(xí)心得之掃雷游戲

    C++學(xué)習(xí)心得之掃雷游戲

    這篇文章主要為大家詳細介紹了C++學(xué)習(xí)心得之掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03

最新評論