力扣 | 557.反转字符串中的单词 III
题目截图
先设置一个新的列表ans,将原字符串遍历分解反转后存入列表,最后再利用join()函数将列表转为新字符串返回。
遍历方法:从头到尾遍历一遍,设置两个指针i和start。
先令start等于i,没有空格时i累加;
然后从start到i开始遍历并逆序在ans列表填入元素;
碰到空格后i再次累加,并在ans列表添加空格;
令start再次等于i,然后重复第一步、和第二部继续遍历逆序填入元素,直到外层遍历完成。再将列表转换为字符串。
这个算法相当于每次碰到空格后开始逆序填入前面的非空格元素,最后达到题目要求的单词逆序,但是每个单词的位置是顺序的。
Python join()方法 | 菜鸟教程
def reverseWords(self, s: str) -> str:
n = len(s)
ans=[]
i = 0
while i < n:
start = i
while i < n and s[i] !=" ":
i += 1
for p in range(start, i):
ans.append(s[start + i - 1 -p])
while i < n and s[i] ==" ":
i += 1
ans.append(" ")
return "".join(ans)
完整测试代码
class Solution:
def reverseWords(self, s: str) -> str:
n = len(s)
ans=[]
i = 0
while i < n:
start = i
while i < n and s[i] !=" ":
i += 1
for p in range(start, i):
ans.append(s[start + i - 1 -p])
while i < n and s[i] ==" ":
i += 1
ans.append(" ")
return "".join(ans)
class main:
a = Solution()
s = "Let's take LeetCode contest"
print(s)
b=a.reverseWords(s)
print(b)
if __name__ == '__main__':
main()
直接利用split()函数将单词从字符串中切出来反转,然后利用join()函数组合成新字符串返回。
Python3 split() 方法 | 菜鸟教程
class Solution(object):
def reverseWords(self, s):
return " ".join(word[::-1] for word in s.split(" "))
还可以不用遍历,直接用两次切片反转。
s.split(" ")切片可以将字符串且切为单词,而s.split(" ")[::-1]可以将字符串切为单词后单词的顺序反转。
" ".join()可以将单词列表转为字符串,而" ".join()[::-1]可以将单词列表转为的字符串反转。
所以" ".join(s.split(" ")[::-1])[::-1]的两次反转,可以将字符串的每个单词字母反转,但是单词顺序不变。
class Solution(object):
def reverseWords(self, s):
return " ".join(s.split(" ")[::-1])[::-1]
或者也可以先反转字符串,再反转每个单词的顺序。
class Solution(object):
def reverseWords(self, s):
return " ".join(s[::-1].split(" ")[::-1])