給定一個字符串,逐個翻轉字符串中的每個單詞。
示例:
輸入: "the sky is blue
", 輸出: "blue is sky the
".
說明:
- 無空格字符構成一個單詞。
- 輸入字符串可以在前面或者後面包含多餘的空格,但是反轉後的字符不能包括。
- 如果兩個單詞間有多餘的空格,將反轉後單詞間的空格減少到只含一個。
題目分析:首先將原字符串逆轉,然後挨個逆轉連續的子串,特別要注意,多個空格在一起的情況。
代碼展示:
class Solution {
public:
void reverseWords(string &s){
if(s.empty())
return;
reverse(s);
string str = "";
int i = 0;
int j = 0;
while(i<s.length()){
while(s[i]==' '&&i<s.length())
i += 1;
if(i==s.length())
break;
j = i;
while(s[j]!=' '&&j<s.length())
j += 1;
string temp = s.substr(i,j-i);
reverse(temp);
str += temp;
str += " ";
i = j;
}
s = str.substr(0,str.length()-1);
}
void reverse(string &s){
char temp;
for(int i=0;i<s.length()/2;i++){
temp = s[i];
s[i] = s[s.length()-i-1];
s[s.length()-i-1] = temp;
}
}
};