「句子」是一個用空格分隔單詞的字符串。給你一個滿足下述格式的句子 text :
句子的首字母大寫
text 中的每個單詞都用單個空格分隔。
請你重新排列 text 中的單詞,使所有單詞按其長度的升序排列。如果兩個單詞的長度相同,則保留其在原句子中的相對順序。
請同樣按上述格式返回新的句子。
示例 1:
輸入:text = "Leetcode is cool"
輸出:"Is cool leetcode"
解釋:句子中共有 3 個單詞,長度爲 8 的 "Leetcode" ,長度爲 2 的 "is" 以及長度爲 4 的 "cool" 。
輸出需要按單詞的長度升序排列,新句子中的第一個單詞首字母需要大寫。
示例 2:
輸入:text = "Keep calm and code on"
輸出:"On and keep calm code"
解釋:輸出的排序情況如下:
"On" 2 個字母。
"and" 3 個字母。
"keep" 4 個字母,因爲存在長度相同的其他單詞,所以它們之間需要保留在原句子中的相對順序。
"calm" 4 個字母。
"code" 4 個字母。
示例 3:
輸入:text = "To be or not to be"
輸出:"To be or to be not"
提示:
text 以大寫字母開頭,然後包含若干小寫字母以及單詞間的單個空格。
1 <= text.length <= 10^5
struct nodes
{
string s;
int k;
};
bool cmp(nodes x, nodes y)
{
if(x.s.length()==y.s.length())return x.k<y.k;
return x.s.length()<y.s.length();
}
class Solution {
public:
string arrangeWords(string text) {
text[0]+='a'-'A';
vector<nodes>v;
v.clear();
int low=0,key=0;
for(int i=0;i<=text.length();i++)
{
if(i==text.length() || text[i]==' ')
{
nodes nod;
nod.s=text.substr(low,i-low);
nod.k=key++;
v.insert(v.end(),nod);
low=i+1;
}
}
sort(v.begin(),v.end(),cmp);
string ans=v[0].s;
for(int i=1;i<v.size();i++)
{
ans+=" ";
ans+=v[i].s;
}
ans[0]+='A'-'a';
return ans;
}
};