1.题目:
输入一个英文句子,单词之间用一个空格隔开,且句首和句尾没有多余空格
翻转句子中单词的顺序,但单词内字符的顺序不变。
为简单起见,标点符号和普通字母一样处理。
长度:[0,1000]
样例输入:
I like castal sweet.、
样例输出:
sweet. castal like I
思路:这不是简单翻转,他是翻转了顺序但是每一个独立的单词并没有翻转,所以这种肯定不能一次性完全,那就要分几次完全。
你想想,我们既然能够把整体翻转过来,那是不是也可以把每一个单词也翻转过来? 如果想到了这里,说明是有点思路了,但是这个代码怎么打呢?
好了,这里涉及到一个算法:双指针;我们可以定义二个变量,让他能够每一次都差一个单词的大小不就完了?
class Solution {
public:
string reverseWords(string s) {
reverse(s.begin(),s.end());
for(int i=0,j;i<s.size();i++)
{
j=i;
while(j<s.size() && s[j]!=' ') j++;
reverse(s.begin()+i,s.begin()+j);
i=j;
}
return s;
}
};
还有一种思路,就是用vector容器来写
class Solution {
public:
string reverseWords(string s) {
vector<string> data;
string result;
for(int i=0;i<s.size();i++)
{
if(s[i]!=' ') result+=s[i];
else data.push_back(" "+result),result="";
}
data.push_back(result);
result="";
for(int i=data.size()-1;i>=0;i--) {
result+=data[i];
}
return result;
}
};