题目描述
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
就是先翻转单个单词,在整体翻转,注意空格处理
实现如下:
#pragma once
#include <string>
#include <vector>
using namespace std;
namespace trans_word
{
class Solution {
public:
string ReverseSentence(string str)
{
int begin = 0;
int end = 0;
for (int i = 0; i < str.length(); i++)
{
if (str[i] == ' ')
{
end = i;
for (int j = 0; j < (end - begin) / 2; j++)
{
swap(str[j + begin], str[end - j - 1]);
}
begin = i + 1;
}
}
end = str.length();
for (int j = 0; j < (end - begin) / 2; j++)
{
swap(str[j + begin], str[end - j - 1]);
}
for (int i = 0; i < str.length() / 2; i++)
{
swap(str[i], str[str.length() - i - 1]);
}
return str;
}
void swap(char& c1, char& c2)
{
char tmp = c1;
c1 = c2;
c2 = tmp;
}
};
}
test.cpp
#pragma once
#include "trans_word.h"
namespace trans_word
{
void start_test()
{
Solution s;
// string ret = s.ReverseSentence("student. a am I");
string ret = s.ReverseSentence("I am a student.");
}
}
二、其他解法
可以使用栈压入单词,再pop出来也可以, 不过使用的额外空间为n