一、题目描述
题目:翻转字符串
输入一个英文句子,翻转句子中单词的顺序,但单词内字符串的顺序不变。为简单起见,标点符号和普通字母一样处理 。
例如,输入字符串为“I am a student.”,输出 “student. a am I” 。
二、解题思路
暂略。(此处主要作为书中python实现补充)
三、代码实现
这里的代码在 牛客网剑指offer:翻转单词顺序列 已测试通过,具体如下:
# -*- coding:utf-8 -*-
class Solution:
def ReverseSentence(self, s):
# write code here
if len(s)==0:
return s
arr = list(s)
pBegin = 0
pEnd = len(arr)-1
arr = self.Reverse(arr,pBegin,pEnd)
pBegin = 0
pEnd = 0
while pBegin < len(arr):
if arr[pBegin] == ' ':
pBegin = pBegin + 1
pEnd = pEnd + 1
elif pEnd == len(arr):
pEnd = pEnd-1
arr = self.Reverse(arr,pBegin,pEnd)
pEnd = pEnd+1
pBegin = pEnd
elif arr[pEnd] == ' ':
pEnd = pEnd-1
arr = self.Reverse(arr,pBegin,pEnd)
pEnd = pEnd+1
pBegin = pEnd
else:
pEnd = pEnd+1
returnStr = ''.join(arr)
return returnStr
def Reverse(self, arr, pBegin, pEnd):
while pBegin<pEnd:
arr[pBegin],arr[pEnd] = arr[pEnd],arr[pBegin]
pBegin = pBegin + 1
pEnd = pEnd - 1
return arr
当然,在Python代码中,还有更简单的实现方式。但我觉得,此类实现方式,在面试过程中,不一定是面试官想要的最终结果,体现不出算法的思想。当然在笔试中是没有问题的。
# -*- coding:utf-8 -*-
class Solution:
def ReverseSentence(self, s):
# write code here
l=s.split(' ')
return ' '.join(l[::-1])