<p>Given a sentence&nbsp;<code>text</code> (A&nbsp;<em>sentence</em>&nbsp;is a string of space-separated words) in the following format:</p>

<ul>
	<li>First letter is in upper case.</li>
	<li>Each word in <code>text</code> are separated by a single space.</li>
</ul>

<p>Your task is to rearrange the words in text such that&nbsp;all words are rearranged in an increasing order of their lengths. If two words have the same length, arrange them in their original order.</p>

<p>Return the new text&nbsp;following the format shown above.</p>

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

<pre>
<strong>Input:</strong> text = &quot;Leetcode is cool&quot;
<strong>Output:</strong> &quot;Is cool leetcode&quot;
<strong>Explanation: </strong>There are 3 words, &quot;Leetcode&quot; of length 8, &quot;is&quot; of length 2 and &quot;cool&quot; of length 4.
Output is ordered by length and the new first word starts with capital letter.
</pre>

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

<pre>
<strong>Input:</strong> text = &quot;Keep calm and code on&quot;
<strong>Output:</strong> &quot;On and keep calm code&quot;
<strong>Explanation: </strong>Output is ordered as follows:
&quot;On&quot; 2 letters.
&quot;and&quot; 3 letters.
&quot;keep&quot; 4 letters in case of tie order by position in original text.
&quot;calm&quot; 4 letters.
&quot;code&quot; 4 letters.
</pre>

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

<pre>
<strong>Input:</strong> text = &quot;To be or not to be&quot;
<strong>Output:</strong> &quot;To be or to be not&quot;
</pre>

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

<ul>
	<li><code>text</code> begins with a capital letter and then contains lowercase letters and single space between words.</li>
	<li><code>1 &lt;= text.length &lt;= 10^5</code></li>
</ul>

class Solution {
public:
    string arrangeWords(string text) {
        map<int,string> v1;
        string temp;
        int c=0;
        for(int i=0;i<text.length();++i)
        {
            //may need an uo map or vector to store pairs of strings and lengths
            if(text[i]==' ' || i==text.length()-1)
            {
                
                if(i==text.length()-1)
                {
                    temp+=text[i];
                    c++;
                }
                // else
                //     temp+=' ';
                //you have to break and make it seperated temp strings 
                cout<<temp<<" "<<c<<endl;
                // pair<int,string> p1(c,temp);
                if(v1.count(c))
                    v1[c]+=(temp)+' ';
                else
                    v1[c]=temp+' ';
                // if(i<text.length()-2)
                //     v1[c]+=' ';
                temp="";
                c=0;
            }
            else
            {
                temp+=text[i];
                c++;
            }
            // cout<<temp<<" ";
        }
        // sort(v1.begin(),v1.end());
        map<int,string>::iterator it=v1.begin();
        string final;
        for(;it!=v1.end();++it)
        {
            final+=it->second;
            // if(it!=(v1.end()))
            //     final+=' '; 
        }
        string f2;
        for(int i=0;i<final.length();++i)
        {
            if(i<final.length()-1)
            {
                if(final[i]>=65 && final[i]<=90)
                    final[i]+=32;
                f2+=final[i]; 
            }
                
        }
        f2[0]-=32;
        return f2;
    }
};
17300