题解 | #翻转单词序列#
翻转单词序列
http://www.nowcoder.com/practice/3194a4f4cf814f63919d0790578d51f3
题目的主要信息:
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“nowcoder. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a nowcoder.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
总结题意,就是将输入字符串中的单词顺序翻转过来,
方法一:
首先遍历一遍字符串,如果当前字符不是空格,就把它加到temp中;如果当前字符是空格,把temp中的单词存到ans中。这样一遍遍历后,从原始的str中提取出单词,用ans存放这些单词,然后将ans翻转一遍,得到翻转的单词序列,再将这些单词用空格拼接起来,拼接的时候需要注意,最后一个单词后面不需要空格。 具体做法:
class Solution {
public:
string ReverseSentence(string str) {
string temp = "";
vector<string> ans;
int len = str.size();
for(int i=0;i<len;i++){//从原始的string中提取出单词
if(str[i]!=' '){
temp=temp+str[i];
}else{
ans.push_back(temp);//存入ans中
temp.clear();
}
}
ans.push_back(temp);
reverse(ans.begin(), ans.end());//翻转单词序列
string res;
for(int i=0;i<ans.size()-1;i++){//保存结果
res+=ans[i]+' ';
}
res+=ans[ans.size()-1];
return res;
}
};
复杂度分析:
- 时间复杂度:,需要遍历一遍字符串。
- 空间复杂度:,最坏情况下,有n个单词,ans大小为n。
方法二:
倒序遍历一遍字符串,如果当前字符不是空格,就把它存到temp中;如果当前字符是空格,就把temp中的单词以空格拼接到ans中,然后清空temp中的值,进行下一轮提取单词。最后遍历结束后,把最后一个单词加到ans中,返回ans中的值。
具体做法:
class Solution {
public:
string ReverseSentence(string str) {
string temp = "";
string ans = "";
int len = str.size();
for(int i=len-1;i>=0;i--){//倒序遍历一遍字符串
if(str[i]!=' '){//提取单词
temp=str[i]+temp;
}else{
ans += temp + ' ';//拼接单词
temp.clear();
}
}
ans += temp;//最后一个单词加入
return ans;
}
};
复杂度分析:
- 时间复杂度:,需要遍历一遍字符串。
- 空间复杂度:,只用了常数空间。