Leetcode刷题记录(9):557反转字符串中的单词III

刷题网站:Leetcode

难度: 简单

语言: Python

计划:从简单——>到中等——>再到难。

一、557反转字符串III

1.1 题目:

给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

  • 示例
输入:"Let's take LeetCode contest"
输出:"s'teL ekat edoCteeL tsetnoc"
1.2 思考分析:

此题是输入一个字符串,然后输出字符串中每个单词的反转。看似简单,其实还是稍微要动一下脑筋思考。最初,我是想将字符串以单词为单位分成若干个子字符串,然后利用双指针方法将它们左右逐个交换,最后再重新组合,但是发现太麻烦了,且中间存在的一些变量变换很繁琐,搞了好久就达不到理想的结果。(可是做完后发现,我这个想法和官方解法有点类似,我为什么没写出代码呢!!!)

然后,想到了python中的切片可以将字符串反转,在此之前我需要理解什么叫切片?以下是我整理的一些资料:

  • 1)在python中,切片通俗来说就是将一个字符串“切”成若干份,通常用符号来执行切片操作,这个用来定义分片和步长。
  • 2)一个完整的切片表达式有两个构成,用于分割三个参数(start_idex : end_index : step)
  • 3)切片分类:从左到右的正向切(即step=1)、从右到左的反向切(即step=-1)。
  • 4)当只有一个时,默认step=1。例如,s[:i]表示从第0个元素到第i-1个元素,且不包括第i个。s[2:10:2]表示输出从第2个到第9个,步长为2的所有元素
  • 5)例子
    • 输入字符串s="hello world!"print(s[::-1]),输出!dlrow olleh
    • 输入字符串s="hello world!"print(s[2:10:2]),输出lowr
    • 输入字符串s="hello world!"print(s[:5:-1]),输出!dlrow

然后是对切片后的字符进行分割,用split()函数,默认以空格来进行划分。

  • 例子
a = "hello world!"
print(a.split())

输出

['hello','world!']

因此,这题的完整代码如下

class Solution:
    def reverseWords(self, s: str) -> str:
        s = s[::-1]
        s_list = s.split()
        ss = str()
        for i in range (1, len(s_list)+1):
        	if ss:
        		ss +=" "+s_list[-i]
        	else:
        		ss = s_list[-i]
        return ss

这个算法的思想是,先对原字符串整个进行翻转,然后将其结果进行分割(以空格为区分),其次再以此从右到左进行重新组合成新的字符串输出。故执行结果如下。
在这里插入图片描述

1.3 总结

此题重点理解字符串和数组的区别,不能用简单的双指针来解决,而是对每个单词进行了翻转。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值