剑指 Offer 58 – I. 翻转单词顺序
题目: 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。
示例 1:
输入: “the sky is blue”
输出: “blue is sky the”
示例 2:
输入: " hello world! "
输出: “world! hello”
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
示例 3:
输入: “a good example”
输出: “example good a”
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
思路:
https://www.bilibili.com/video/BV1BT4y127Ft/?spm_id_from=333.788&vd_source=cc3333a27046bad449a2b6818cc4149c
思路:
从后往前找,找到第一个非空的,将j指向该位置,继续遍历,当下次再出现空格时,跳出内层while循环,说明一个单词已经出来了
这时候判断要保存的result字符串里边有没有元素,如果有元素那么加一个空格,然后拼接上,最后返回result。
class Solution {
public:
string reversewords(string s) {
string result;
int j = 0;
int i = s.size() - 1;
while (i >= 0) {
if (s[i] != ' ') {
j = i;
while (i >= 0 && s[i] != ' ') {
i -= 1;
}
if (!result.empty()) {
result += ' ';
}
result += s.substr(i + 1, j - i);
}
i -= 1;
}
return result;
}
};
int main() {
string s = " hello world! ";
Solution ss;
cout << ss.reversewords(s) << endl;
return 0;
}
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
二维码