#151. 翻转字符串里的单词
输入:s = "the sky is blue"
输出: "blue is sky the"
- 输入字符串?
s ?可以在前面、后面或者单词间包含多余的空格。 - 翻转后单词间应当仅用一个空格分隔。
- 翻转后的字符串中不应包含额外的空格
#?当使用split()函数时
class Solution(object):
# 当使用split()函数时
def reverseWords(self, s):
s = s.split()
s = list(s)
l, r = 0, len(s) - 1
while(l < r):
s[l], s[r] = s[r], s[l]
l += 1
r -= 1
return ' '.join(s)
????#?不使用split()函数
????#?3步?1去除多余空格?2?字符串整体翻转?3?单词再翻转
class Solution:
# 不使用split()函数
# 3步 1去除多余空格 2 字符串整体翻转 3 单词再翻转
# 1去除多余空格
def remove_space(self, s):
l, r = 0, len(s) - 1
# 去除单词两端的空格
while(l < r and s[l] == ' '):
l += 1
while(l < r and s[r] == ' '):
r -= 1
# 已经删除了两端空格,再删除单词间的空格
s_new = []
while(l <= r):
if s[l] != ' ':
s_new.append(s[l])
elif(s[l] == ' ' and s[l - 1] != ' '):
s_new.append(s[l])
l += 1
return s_new
# 2 字符串整体翻转
def reverse_str(self, s):
l, r = 0, len(s) - 1
while l < r:
s[l], s[r] = s[r], s[l]
l += 1
r -= 1
return s
# 3 翻转单词
def reverse_each_words(self, s):
l, r = 0, 0
while l < len(s):
while(r < len(s) and s[r] != ' '):
# 找到空格前的位置
r += 1
s[l : r] = self.reverse_str(s[l : r])
l = r + 1
r += 1
return s
def reverseWords(self, s):
"""
:type s: str
:rtype: str
"""
s = self.remove_space(s)
s = self.reverse_str(s)
s = self.reverse_each_words(s)
return ''.join(s)
|