每日一道leetcode(python)557. 反转字符串中的单词 III
2021-08-18
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例:
输入:"Let's take LeetCode contest"
输出:"s'teL ekat edoCteeL tsetnoc"
提示:
在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-words-in-a-string-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
Python split()方法
描述:Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串
split() 方法语法:str.split(str="", num=string.count(str)).
参数
- str – 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
- num – 分割次数。默认为 -1, 即分隔所有。
str = "Line1-abcdef \nLine2-abc \nLine4-abcd";
print str.split( ); # 以空格为分隔符,包含 \n
print str.split(' ', 1 ); # 以空格为分隔符,分隔成两个
------------------------
以上实例输出结果如下:
['Line1-abcdef', 'Line2-abc', 'Line4-abcd']
['Line1-abcdef', '\nLine2-abc \nLine4-abcd']
思路
- 按照空格对字符串进行分割;
- 定义辅助列表,然后将分割部分的单词进行翻转,按照顺序添加到辅助列表中;
- 最后将反转之后单词进行拼接,添加空格间隔。
class Solution:
def reverseWords(self, s: str) -> str:
s = s.split(' ') # s以空格分开以后成了列表类型
res = '' # 创建一个空的字符串
n = len(s)
for i in range(n):
if i != n - 1:
s[i] = s[i][::-1] # 将每个单独的字符串进行翻转
res = res + s[i] + ' '
else: # 要考虑到最后一个字符串拼接的时候不能带空格
s[i] = s[i][::-1]
res = res + s[i]
return res
Python3 join()方法
描述:Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。
join()方法语法:str.join(sequence)
参数:sequence – 要连接的元素序列。
返回值:返回通过指定字符连接序列中元素后生成的新字符串。
s1 = "-"
s2 = ""
seq = ("r", "u", "n", "o", "o", "b") # 字符串序列
print (s1.join( seq ))
print (s2.join( seq ))
不用像之前那样考虑最后一个字符串不需要在后面添加空格
class Solution:
def reverseWords(self, s: str) -> str:
# 按照空格进行切割
s = s.split(' ')
# 然后将切割后的每部分都进行翻转
ans = []
for part in s:
part = part[::-1]
ans.append(part)
# 最后拼接
return ' '.join(ans)
思路:两次反转
- 将字符串以空格分割后反转列表
- 将列表以空格连接后反转字符串
class Solution:
def reverseWords(self, s: str) -> str:
# s.split()[::-1] 将字符串以空格分割后反转列表
# ' '.join()[::-1] 将列表以空格连接后反转字符串
return ' '.join(s.split()[::-1])[::-1]
递归写法不考虑,有兴趣自行查阅
版权声明:本文为dearzhuiyi原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。