<p>You are given a string <code>text</code> of words that are placed among some number of spaces. Each word consists of one or more lowercase English letters and are separated by at least one space. It&#39;s guaranteed that <code>text</code> <strong>contains at least one word</strong>.</p>

<p>Rearrange the spaces so that there is an <strong>equal</strong> number of spaces between every pair of adjacent words and that number is <strong>maximized</strong>. If you cannot redistribute all the spaces equally, place the <strong>extra spaces at the end</strong>, meaning the returned string should be the same length as <code>text</code>.</p>

<p>Return <em>the string after rearranging the spaces</em>.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> text = &quot;  this   is  a sentence &quot;
<strong>Output:</strong> &quot;this   is   a   sentence&quot;
<strong>Explanation:</strong> There are a total of 9 spaces and 4 words. We can evenly divide the 9 spaces between the words: 9 / (4-1) = 3 spaces.
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> text = &quot; practice   makes   perfect&quot;
<strong>Output:</strong> &quot;practice   makes   perfect &quot;
<strong>Explanation:</strong> There are a total of 7 spaces and 3 words. 7 / (3-1) = 3 spaces plus 1 extra space. We place this extra space at the end of the string.
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= text.length &lt;= 100</code></li>
	<li><code>text</code> consists of lowercase English letters and <code>&#39; &#39;</code>.</li>
	<li><code>text</code> contains at least one word.</li>
</ul>

class Solution {
public:
    string reorderSpaces(string text) {
        bool word;
        int i, j, k;
        int idx;
        int m, n;
        int nspaces, totspaces;
        string res;
        vector<int> words;

        m = text.length();

        totspaces = 0;
        word = false;
        for (i = 0; i < m; i++) {
            if (!word) {
                if (text[i] != ' ') {
                    words.push_back(i);
                    word = true;
                } else
                    ++totspaces;
            } else if (text[i] == ' ') {
                ++totspaces;
                word = false;
            }
        }

        res.resize(m);

        n = words.size() - 1;
        nspaces = n == 0 ? 0 : totspaces / n;

        k = 0;
        for (i = 0; i <= n; i++) {
            idx = words[i];
            for (j = idx; j < m && text[j] != ' '; j++)
                res[k++] = text[j];
            if (i == n)
                nspaces = n == 0 ? totspaces : totspaces % n;
            for (j = 0; j < nspaces; j++)
                res[k++] = ' ';
        }

        return res;
    }
};
7800