题目描述
给定一个字符串,逐个翻转字符串中的每个单词。
示例 1:
输入: " hello world! "
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
示例 2:
输入: "a good example"
输出: "example good a"
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
说明:
无空格字符构成一个单词。
输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
思路1
先将字符串按照空格拆分,之后从后先前添加到字符串ss返回即可,注意最后一个不要加空格
代码实现
class Solution {
public:
//思路:先将字符串按照空格拆分,之后从后先前添加到字符串ss返回即可,注意最后一个不要加空格
string reverseWords(string s) {
vector<string> tmp;
tmp = string_sqlit(s," ");
int size = tmp.size();
string ss = "";
for(int i = size -1; i >= 0; --i){
ss += tmp[i];
if(i == 0){
continue;
}
ss += " ";
}
return ss;
}
//下面一段代码是使用STL来实现C++中的split,输入要拆分的字符串s,以及匹配模式,返回拆分后数组
vector<string> string_sqlit(string s,string pattern){
vector<string> result;
int length = s.length();
int index = s.find(' ');
while(index != string::npos){
string ss = s.substr(0,index);
if(ss.length() != 0){ //防止出现连续空格
result.push_back(ss);
}
s = s.substr(index+1,length);
index = s.find(' ');
}
if(s.length() != 0){//最后一个也加进去
result.push_back(s);
}
return result;
}
};
思路2
字符串类stringstream来解决问题。首先将字符串存入一个字符串流中,输入操作>>就会自行提取不含空格的单词。
代码实现
//思路2:字符串类stringstream来解决问题。首先将字符串存入一个字符串流中,输入操作>>就会自行提取不含空格的单词。
string reverseWords(string s){
string ss = "";
if(s.empty()) {return ss;}
istringstream istr(s);
string tmp;
istr>>ss;
while(istr>>tmp){
ss = tmp + " " + ss;
}
return ss;
}
思路3
可以使用栈来实现.