当前位置:网站首页>LeetCode #557.反转字符串中的单词 III
LeetCode #557.反转字符串中的单词 III
2022-07-29 05:24:00 【张楚明ZCM】
题目截图

方法一:使用额外空间
先设置一个新的列表ans,将原字符串遍历分解反转后存入列表,最后再利用join()函数将列表转为新字符串返回。
遍历方法:从头到尾遍历一遍,设置两个指针i和start。
先令start等于i,没有空格时i累加;
然后从start到i开始遍历并逆序在ans列表填入元素;
碰到空格后i再次累加,并在ans列表添加空格;
令start再次等于i,然后重复第一步、和第二部继续遍历逆序填入元素,直到外层遍历完成。再将列表转换为字符串。
这个算法相当于每次碰到空格后开始逆序填入前面的非空格元素,最后达到题目要求的单词逆序,但是每个单词的位置是顺序的。
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()
方法二:利用python的split()函数遍历切片反转
直接利用split()函数将单词从字符串中切出来反转,然后利用join()函数组合成新字符串返回。
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])边栏推荐
猜你喜欢

Ml self study notes 5

Pit avoidance: about the interconnection of two hc-05 master-slave integrated Bluetooth modules, there is no connection problem

【软件工程之美 - 专栏笔记】23 | 架构师:不想当架构师的程序员不是好程序员

STM32 printf问题总结 semihosting microLIB理解

关于【链式前向星】的自学理解

HAL学习笔记 - 7 定时器之基本定时器

【软件工程之美 - 专栏笔记】16 | 怎样才能写好项目文档?

2022暑初二信息竞赛学习成果分享2

NoClassDefFoundError 处理

JUC concurrent knowledge points
随机推荐
【软件工程之美 - 专栏笔记】28 | 软件工程师的核心竞争力是什么?(下)
Hal library learning notes-12 SPI
ML7 self study notes
【软件工程之美 - 专栏笔记】“一问一答”第2期 | 30个软件开发常见问题解决策略
Ml8 self study notes LDA principle formula derivation
crawl笔记
Reading papers on false news detection (5): a semi supervised learning method for fake news detection in social media
【软件工程之美 - 专栏笔记】19 | 作为程序员,你应该有产品意识
【软件工程之美 - 专栏笔记】30 | 用好源代码管理工具,让你的协作更高效
倾角传感器精度校准检测
NFC双向通讯13.56MHZ非接触式阅读器芯片--Si512替代PN512
EPS32+Platform+Arduino 跑马灯
CS5340国产替代DP5340多比特音频 A/D 转换器
FPGA based: multi-target motion detection (hand-in-hand teaching ①)
关于时间复杂度的个人看法
顺序表和链表
低功耗蓝牙5.0芯片nrf52832-QFAA
QT learning notes QtSql
Jingwei Qili: development of heart rate and blood oxygen module based on hmep060 (1: FPGA sends multi bit instructions)
【软件工程之美 - 专栏笔记】22 | 如何为项目做好技术选型?