目录
题目:
思路:
代码出现
结果
题目:
给定一个字符串,逐个翻转字符串中的每个单词。
示例 1:
输入: "the sky is blue"
输出: "blue is sky the"
示例 2:
输入: " hello world! "
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
示例 3:
输入: "a good example"
输出: "example good a"
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
思路:
1.将字符串多余的空格除去(本题难点);
2.将去除空格和后的字符串翻转;
3.将单词挨个翻转,以空格为翻转标志。
代码出现
#if 0
include <iostream>
#include <vector>
using namespace std;
#endif#include<iostream>
#include <string.h>
#include <string>
using namespace std;
//理解代码需要注意空格的个数,删除完空格后,中间的还剩一个,前后没有
void reverse(string& s, int start, int end)
{for (int i = start, j = end; i < j; i++, j--){swap(s[i], s[j]);}
}
void remove_spaces(string& s)
{int slow = 0, fast = 0;while (s.size() > 0 && s[fast] == ' ' && fast < s.size())//去除开头的空格{fast++;}for (fast; fast < s.size(); fast++)//去除中间的空格,包括的空格(但还剩一个空格){if (fast - 1 > 0 && s[fast] == ' ' && s[fast - 1] == ' '){continue;}else{s[slow++] = s[fast];//s[slow]=s[fast];slow++;}}if (slow - 1 > 0 && s[slow - 1] == ' '){s.resize(slow - 1);}else{s.resize(slow);}
}int main()
{string s;cout << "string: " << endl;getline(cin, s);remove_spaces(s);//删除空格reverse(s, 0, s.size() - 1);//翻转字符串for (int i = 0; i < s.size(); i++)//每个单词翻转{int j = i;while (j < s.size() && s[j] != ' '){j++;}reverse(s, i, j - 1);i = j;}cout << "res: " << s << endl;
}#if 0
int main()
{Solution test;//vector<int> input = {1,2,3,4,5,6,7,8};std::string result = test.ReverseSentence("qqqqqqaas");// for (auto var : result)//{// std::cout << "var:" << var << std::endl;//}std::cout << "result:" << result << std::endl;return 0;
}
#endif