目录
题目:
思路:
代码出现
结果
题目:
给定一个字符串,逐个翻转字符串中的每个单词。
示例 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