151. 翻转字符串里的单词
给定一个字符串,逐个翻转字符串中的每个单词。
示例 1 :
输入: "the sky is blue"
输出: "blue is sky the"
示例 2 :
输入: " hello world! "
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括
示例 3 :
输入: "a good example"
输出: "example good a"
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
说明:
无空格字符构成一个单词。
输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
python解法 最简单
class Solution :
def reverseWords ( self, s: str) - > str:
return " " . join ( s. split ( ) [ :: - 1 ] )
C++stringstream的使用
strngstream 可以用于分割被空格、制表符等符号分割的字符串
class Solution {
public :
string reverseWords ( string s) {
stringstream ss;
string ans= "" , temp;
ss<< s;
while ( ss>> temp) {
ans= " " + temp+ ans;
}
if ( ans!= "" )
ans. erase ( ans. begin ( ) ) ;
return ans;
}
} ;
先翻转整体再翻转局部
class Solution {
public :
string reverseWords ( string s) {
reverse ( s. begin ( ) , s. end ( ) ) ;
int n = s. size ( ) ;
int idx = 0 ;
for ( int start = 0 ; start < n; ++ start) {
if ( s[ start] != ' ' ) {
if ( idx != 0 ) s[ idx++ ] = ' ' ;
int end = start;
while ( end < n && s[ end] != ' ' ) s[ idx++ ] = s[ end++ ] ;
reverse ( s. begin ( ) + idx - ( end - start) , s. begin ( ) + idx) ;
start = end;
}
}
s. erase ( s. begin ( ) + idx, s. end ( ) ) ;
return s;
}
} ;