【题目】
给定一个字符串,逐个翻转字符串中的每个单词。
示例 1:
输入: "the sky is blue"
输出: "blue is sky the"
示例 2:
输入: " hello world! "
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
示例 3:
输入: "a good example"
输出: "example good a"
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
【思路】
最简单的想法:切割字符串,再倒序拼接在一起。注意:python的字符串split方法不用添加参数,默认按照(多个)空格、制表符、'\n'等切割字符串,本题若添加了参数' ',反而不能通过字符串中有连续空格
这种情况。
本题经常出现在面试问题中,很多时候我们不能直接调用方法,还是得一行一行写代码。
【代码】
python版本
调用split方法
class Solution(object):
def reverseWords(self, s):
"""
:type s: str
:rtype: str
"""
ls = s.split()
return ' '.join(ls[::-1])
直接实现
class Solution(object):
def reverseWords(self, s):
"""
:type s: str
:rtype: str
"""
res = ''
tmp = ''
for i in range(len(s)):
# 找到非空格的位置
if s[i] != ' ':
tmp += s[i]
else:
# 找到空格的位置
# 特殊情况!(首字符为空格,连续空格)
if tmp != "":
if res == "":
res = tmp
else:
res = tmp + " " + res
tmp = ""
# 最后一个单词
if tmp != "":
if res == "":
res = tmp
else:
res = tmp + " " + res
return res
C++版本
class Solution {
public:
string reverseWords(string s) {
string res="";
string tmp="";
for(int i=; i<s.size(); i++){
// 找到非空格的位置
if(s[i] != ' '){
tmp += s[i];
}else{
// 找到空格的位置
// 特殊情况!(首字符为空格,连续空格)
if(tmp != ""){
if(res == "")
res = tmp;
else
res = tmp + " " + res;
tmp = "";
}
}
}
if(tmp != ""){
if(res == "")
res = tmp;
else
res = tmp + " " + res;
}
return res;
}
};