大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。
题目考察的知识点
字符串处理,单词逆序。
题目解答方法的文字分析
题目要求我们删除 s
开头和结尾的空格,然后按空格分隔单词,并保持单词内部的顺序不变,只逆序单词的顺序。为了解决这个问题,我们可以采用以下思路:
思路:
- 首先,我们需要删除
s
开头和结尾的空格,可以使用std::string::find_first_not_of()
和std::string::find_last_not_of()
函数来找到s
开头和结尾的非空格字符的位置,然后截取出需要处理的子字符串。 - 然后,我们可以将子字符串进行逆序处理,得到一个逆序的字符串。
- 接下来,遍历逆序字符串,找到每个单词的起始位置和终止位置,遇到空格字符时表示一个单词的终止,将该单词截取出来,然后将单词逆序处理,并加入到结果字符串中,并在单词后面加上一个空格。
- 最后,去除结果字符串末尾多余的空格,得到最终的结果。
举个例子:假设 s = " 牛X牛 Y 牛Z "
.
- 删除开头和结尾的空格得到
"牛X牛 Y 牛Z"
. - 将
"牛X牛 Y 牛Z"
逆序得到逆序字符串"Z牛 Y 牛X牛"
. - 遍历逆序字符串,找到 "Z牛 ",将 "Z牛" 逆序得到 "牛Z",加入结果字符串。
- 继续遍历,找到 "Y ",将 "Y" 逆序得到 "Y",加入结果字符串。
- 最后找到 "牛X牛",将 "牛X牛" 逆序得到 "牛X牛",加入结果字符串。
- 去除结果字符串末尾多余的空格,得到最终的结果 "牛Z Y 牛X牛"。
本题解析所用的编程语言
C++
完整且正确的编程代码
class Solution { public: string reverseWords(string s) { // 删除开头和结尾的空格 int start = s.find_first_not_of(' '); int end = s.find_last_not_of(' '); s = s.substr(start, end - start + 1); // 逆序处理整个字符串 reverse(s.begin(), s.end()); string result = ""; // 用于存储结果的字符串 int wordStart = 0; int wordEnd = 0; // 遍历逆序字符串,寻找每个单词的起始位置和终止位置 while (wordEnd < s.size()) { if (s[wordEnd] == ' ') { // 截取一个单词并逆序加入结果字符串 result += reverseWord(s.substr(wordStart, wordEnd - wordStart)) + " "; // 跳过空格字符 while (wordEnd < s.size() && s[wordEnd] == ' ') { wordEnd++; } // 更新下一个单词的起始位置 wordStart = wordEnd; } else { wordEnd++; } } // 处理最后一个单词 result += reverseWord(s.substr(wordStart, wordEnd - wordStart)); return result; } // 辅助函数:逆序单词 string reverseWord(string word) { reverse(word.begin(), word.end()); return word; } };
您的关注、点赞、收藏就是我创作的动力,三连支持阿Q!