Given an input string, reverse the string word by word.
For example,
Given s = "the sky is blue
",
return "blue is sky the
".
Clarification:
Solution in C++ 2:
- What constitutes a word?
A sequence of non-space characters constitutes a word. - Could the input string contain leading or trailing spaces?
Yes. However, your reversed string should not contain leading or trailing spaces. - How about multiple spaces between two words?
- Reduce them to a single space in the reversed string.
Solution in Java
public class Solution {
public String reverseWords(String s) {
String[] words = s.split("\\s+");
String revWords = "";
for(int i=words.length-1; i>=0; i--){
revWords =revWords + words[i]+" ";
}
revWords=revWords.trim();
return revWords;
}
}
Note:函数split参数可以为正则表达式,\s+表示一个或多个空格,回车,换页符等空白占位符,所以可以表示一个或多个空格。trim()去首尾空格。
Solution in C++ 1:
class Solution {
public:
void reverseWords(string &s) {
vector<string> words;
int length = s.length();
if(length==0) return;
int start =0, index=0;
while(index<length){
if(s[start]==' '){
start++;
index++;
}
else if(s[index]==' '){
words.push_back(s.substr(start, index-start));
start=index+1;
index=start;
}
else{
index++;
}
}
if(start!=length) words.push_back(s.substr(start, length-start));
s="";
for(int i=words.size()-1; i>0; i--)
s+=words[i]+" ";
if(words.size()!=0) s+=words[0];
}
};
Note: s.substr(start, length-start)返回从start开始,长度length-start的子串。C++本身没有trim()函数,最后一个字符需特殊处理,否则会引入多余的空格。C++和Java串联string都是用"+"号。
Solution in C++ 2:
class Solution {
public:
void reverseWords(string &s) {
vector<string> words;
int length = s.length();
if(length==0) return;
int start =0, index=0;
while(start<length&&(index=s.find(' ', start))!=string::npos){
if(index==start) start++;
else{
words.push_back(s.substr(start, index-start));
start=index+1;
}
}
if(start<length) words.push_back(s.substr(start));
s="";
for(int i=words.size()-1; i>0; i--)
s+=words[i]+" ";
if(words.size()>0) s+=words[0];
}
};
Note: C++字符串find函数用法:(原文见http://blog.csdn.net/youxin2012/article/details/9162415)
size_t find (const string& str, size_t pos = 0) const; //查找对象--
string类对象
size_t find (const char* s, size_t pos = 0) const; //查找对象--
字符串
size_t find (const char* s, size_t pos, size_t n) const; //查找对象--
字符串的前n个字符
size_t find (char c, size_t pos = 0) const; //查找对象--
字符
结果:找到 -- 返回 第一个字符的索引
没找到--返回 string::npos