剑指 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
分享
二维码
< <上一篇
下一篇>>