3. LCR 181. 字符串中的单词反转
题目描述:
你在与一位习惯从右往左阅读的朋友发消息,他发出的文字顺序都与正常相反但单词内容正确,为了和他顺利交流你决定写一个转换程序,把他所发的消息 message 转换为正常语序。
注意:输入字符串 message 中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。
我写的版本:
class Solution:
def reverseMessage(self, message: str) -> str:
nlist = []
nlist[:] = message.split(" ")
while '' in nlist:
nlist.remove('')
for i in range(len(nlist)//2):
nlist[i], nlist[-(i+1)] = nlist[-(i+1)], nlist[i]
return " ".join(nlist)
网友题解:split()可把多个空格看作一个空格。
class Solution:
def reverseMessage(self, message: str) -> str:
return ' '.join(message.strip().split()[::-1])
解法2:双指针
class Solution:
def reverseMessage(self, message: str) -> str:
message = message.strip() # 删除首尾空格
i = j = len(message) - 1
res = []
while i >= 0:
while i >= 0 and message[i] != ' ': i -= 1 # 搜索首个空格
res.append(message[i + 1: j + 1]) # 添加单词
while i >= 0 and message[i] == ' ': i -= 1 # 跳过单词间空格
j = i # j 指向下个单词的尾字符
return ' '.join(res) # 拼接并返回
作者:Krahets
这种解法思路为:先strip()去除字符串首尾空格,i、j初始化为字符串最后一个字符索引,初始化一个新列表用来存放单词,while i >=0:表示会从后到前一直遍历,while i >= 0 and message[i] != ' ': i -= 1表示i会向前移动直到遇到空格,res.append(message[i + 1: j + 1])表示会从空格后(单词第一个字符)开始到最后一个字符,j+1取不到,取的是j,刚好截取完整单词。while i >=0 and message[i] == ' ': i -= 1 j = i表示向前移动跳过空格直到遇到下一个单词最后一个字符,j=i表示让j指向下一个单词最后一个字符,开始下一轮截取单词。
阅读剩余
版权声明:
作者:konoha
链接:https://konoha.cc/3-lcr-181-%e5%ad%97%e7%ac%a6%e4%b8%b2%e4%b8%ad%e7%9a%84%e5%8d%95%e8%af%8d%e5%8f%8d%e8%bd%ac.html
文章版权归作者所有,未经允许请勿转载。
THE END