力扣周賽 1451. 重新排列句子中的單詞

「句子」是一個用空格分隔單詞的字符串。給你一個滿足下述格式的句子 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;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章