假设我们有一个包含不同单词的字符串,该字符串称为句子,其格式如下:
首字母大写。
文本中的每个单词都由一个空格字符分隔。
我们必须重新排列文本中的单词,以使所有单词都按照其长度的增加顺序重新排列。如果两个单词的长度相同,请按其原始顺序排列它们。
然后最后通过应用这些规则返回字符串。
因此,如果输入就像“我喜欢用cpp编写代码”,那么输出将是“我喜欢cpp编写代码”
为了解决这个问题,我们将遵循以下步骤-
将文字的第一个字符变成小写字母
定义一个数组x:=将所有单词用空格分割后
定义成对的数组
对于初始化i:= 0,当i <x的大小时,更新(将i增加1),执行-
在s的末尾插入{x [i],i}
根据长度对数组进行排序,如果长度相同,则使用索引值
ret:=空字符串
对于初始化i:= 0,当i <s的大小时,更新(将i增加1),执行-
ret:= ret与空白连接
ret:= ret连接s [i]的第一个元素
如果i不等于s的大小,则-
重返首都
返回ret
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h> using namespace std; class Solution { public: vector <string> split(string& s, char delimiter){ vector <string> tokens; string token; istringstream tokenStream(s); while(getline(tokenStream, token, delimiter)){ tokens.push_back(token); } return tokens; } static bool cmp(pair <string, int>& a, pair <string, int>& b){ if(a.first.size() != b.first.size()) return a.first.size() < b.first.size(); return a.second < b.second; } static bool a(string& a, string& b){ return a.size() < b.size(); } string arrangeWords(string text) { text[0] += 'a' - 'A'; vector<string> x = split(text, ' '); vector<pair<string, int> > s; for (int i = 0; i < x.size(); i++) s.push_back({ x[i], i }); sort(s.begin(), s.end(), cmp); string ret = ""; for (int i = 0; i < s.size(); i++) { ret += s[i].first; if (i != s.size() - 1) ret += ' '; } ret[0] += 'A' - 'a'; return ret; } }; main(){ Solution ob; cout << (ob.arrangeWords("I love to code in cpp")); }
"I love to code in cpp"
输出结果
I to in cpp love code