1.题目
2.题目意思
将字符串里的单词整体翻转,首尾空格不保留,中间空格只能留1。
3.代码
解法一:
class Solution:
def reverseWords(self, s: str) -> str:
s = list(s)
n = len(s)
def reverse(s, i, j):
while i<j:
s[i], s[j] = s[j], s[i] # 反转数组,包括内容也翻转了
i += 1
j -= 1
def wordReverse(s):
# 内容翻转回来
i, j = 0, 0
while i<n:
while i < n and s[i] == " ":
# 找出第一个空格
i += 1
# i是第一个单词的首字母
j = i
while j <n and s[j]!=" ":
# 找到单词末尾
j += 1
# j是第一个单词后面的空格
reverse(s, i, j-1) # 翻转单词
i = j
def cleanSpace(s):
# 清理多余空格
i, j = 0, 0
while j<n:
# 找到第一个单词位置
while j<n and s[j] == " ":
j += 1
# 向前移动
while j < n and s[j]!=" ":
s[i] = s[j]
i += 1
j += 1
# 移动下一个单词
while j <n and s[j]==" ":
j += 1
if j<n:
s[i] = " "
i+=1
return "".join(s[:i])
reverse(s, 0, n-1)
wordReverse(s)
return cleanSpace(s)
思路:双指针~
具体步骤代码里面注释的很详细了,就是老老实实练习基本功,整体反转,单词反转回来,去空格三个步骤。
解法二
class Solution:
def reverseWords(self, s: str) -> str:
return " ".join(s.split()[::-1])
思路:python的特性~
python就是优美~想练基本功就好好练解法一,基本功扎实就可以追求代码优美了,一行搞定多好看!split函数可以看这里。简单来说就是将字符串以空格进行分割(不加参数就不会保留任何空格),分割成只含单词的列表,倒排列表然后以一个空格对列表进行拼接,简单,大气!
就这样~加油加油!