美文网首页
重新排列句子中的单词

重新排列句子中的单词

作者: WAI_f | 来源:发表于2020-07-15 23:03 被阅读0次

题目:

「句子」是一个用空格分隔单词的字符串。给你一个满足下述格式的句子 text :

  • 句子的首字母大写
  • text 中的每个单词都用单个空格分隔。

请你重新排列 text 中的单词,使所有单词按其长度的升序排列。如果两个单词的长度相同,则保留其在原句子中的相对顺序。

示例:

输入:text = "Leetcode is cool"
输出:"Is cool leetcode"
解释:句子中共有 3 个单词,长度为 8 的 "Leetcode" ,长度为 2 的 "is" 以及长度为 4 的 "cool" 。
输出需要按单词的长度升序排列,新句子中的第一个单词首字母需要大写。

解题方法:

解题思路:

  • 将字符串首字母转成小写;
  • 分割字符串,并存进vector中,pair包括两部分:分割出来的单词以及单词在原始句子中的编号;
  • 对vector进行排序,需要针对pair编写专门的排序规则,重点也是难点;
  • 合并排序后的字符串;
  • 调整新句子首字母大写。

大致思路就是这些,这种字符串题目做起来不是很难,起码是有思路的,但是坑多,写起来很不舒服。

代码和结果:

class Solution {
public:
    static bool cmp(pair<string,int> a, pair<string,int> b)
    {
        if(a.first.size()==b.first.size())
            return a.second<b.second;
        else
            return a.first.size()<b.first.size();
    }
    string arrangeWords(string text) {
        vector<pair<string,int>> strs;
        string s="";
        int idx=0;
        text[0]=text[0]+'z'-'Z';
        for(int i=0;i<text.size();i++)
        {
            if(text[i]!=' ')
            {
                s.push_back(text[i]);
            }
            else
            {
                strs.push_back(make_pair(s,idx));
                s="";
                idx++;
            }
        }
        strs.push_back(make_pair(s,idx));

        sort(strs.begin(),strs.end(),cmp);
        string res="";
        for(int i=0;i<strs.size();i++)
        {
            res+=strs[i].first+" ";
        }
        
        if(res[0]<='z'&&res[0]>='a')
            res[0]+='Z'-'z';
        return res.substr(0,res.size()-1);
    }
};
运行结果:

原题链接:https://leetcode-cn.com/problems/rearrange-words-in-a-sentence/

相关文章

  • 重新排列句子中的单词

    题目: 「句子」是一个用空格分隔单词的字符串。给你一个满足下述格式的句子 text :句子的首字母大写text 中...

  • 文本向量处理

    2020/04/04文章[1]中对文本处理中的核心进行了说明: 怎么表示单词、句子 怎么表示单词或者句子中的语义信...

  • Design & Coed 2: 找出最长单词

    找出最长单词 Find the Longest Word in a String 找出最长单词 在句子中找出最长的...

  • 面试题58 - I. 翻转单词顺序

    翻转单词顺序 题目描述 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通...

  • 翻转字符串

    题目:翻转单词顺序。 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字...

  • 翻转字符串

    题目一:翻转单词顺序。 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通...

  • 反转句子

    题目:给你一个句子(只包含字母和空格),将句子中的单词位置反转,单词用空格分割,单词之间只有一个空格,前后没有空格...

  • 面试题58(剑指offer)--翻转字符串

    题目一: 翻转单词顺序。输入一个英文句子,翻转句子中单词的顺序,但单词内字符顺序不变。为简单起见,标点符号和普通字...

  • 面试题58(1):翻转字符串

    题目 翻转单词顺序输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一...

  • 剑指Offer Java版 面试题58:翻转字符串

    题目一:翻转单词顺序。输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字...

网友评论

      本文标题:重新排列句子中的单词

      本文链接:https://www.haomeiwen.com/subject/wmsshktx.html