【边学边敲边记】LeetCode013:反转字符串中的单词 III

简介: 【边学边敲边记】LeetCode013:反转字符串中的单词 III

简说Python,号主老表,Python终身学习者,数据分析爱好者,从18年开始分享Python知识,原创文章227篇,写过Python、SQL、Excel入门文章,也写过Web开发、数据分析文章,老表还总结整理了一份2022Python学习资料和电子书资源,关注后私信回复:2022 即可领取。

image.png

一、写在前面

LeetCode 第十二题反转字符串传输门:LeetCode012 : 反转字符串

今天给大家分享的是LeetCode 数组与字符串 第十三题:反转字符串中的单词 III,为面试而生,期待你的加入。

“Use the utility in the API is recommended in the project. But if you use it in an interview, you will definitely fail .

二、今日题目

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

示例:

输入: "Let's take LeetCode contest"
输出: "s'teL ekat edoCteeL tsetnoc"

注意

在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。

三、 分析

这个题目,看到第一眼,感觉有点难,我一看到题目,还以为是一个字符串里有英文单词,只用识别英文单词,然后把英文单词逆转就好,后来仔细一看,是一段只由英文单词和空格组成的字符串,这样的话,就简单了很多,具体思路如下图所述:

image.png

思路

四、解题

1.快捷的方法:

时间复杂度:O(n)
毕竟还是得把每个单词都遍历一遍~

class Solution(object):
    def reverseWords(self, s):
        """
        :type s: str
        :rtype: str
        """
        # 根据空格,把字符串分隔开
        r_list = s.split(" ")
        # 把列表每个单词字符串逆转
        for i in range(len(r_list)):
            r_list[i] = r_list[i][::-1]
        # 用 “ ” 连接列表的每个单词
        result_s = " ".join(r_list)
        return result_s

(1)切片/join操作,前一Python小知识 | 这些技能你不会?(一)有较详细介绍。

(2)split函数介绍
Python split((str, n
um) 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则仅分隔 num 个子字符串。
参数介绍:

str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。

num -- 分割次数。

(3)提交结果

image.png

提交结果


测试数据:30组
运行时间:32ms
击败人百分比:94.56%

2.自己动手,丰衣食足?

遍历,分组都自己动手实现
时间复杂度:O(n)

class Solution1(object):
    def reverseWords(self, s):
        """
        :type s: str
        :rtype: str
        """
        # 根据空格,把字符串分隔开
        s = s + ' '
        r_list = []
        word = ''
        flag = 0
        for i in s:
            if i != " ":
                word = word + i
                flag = 1
            else:
                if flag == 1:
                    r_list.append(word)
                    word = ''
                    flag = 0
        # 把列表每个单词字符串逆转
        for i in range(len(r_list)):
            r_list[i] = self.reverseString(r_list[i])
        # 用 “ ” 连接列表的每个单词
        result_s = ''
        for i in range(len(r_list)):
            if i == len(r_list)-1:
                result_s = result_s + r_list[i]
                break
            result_s = result_s + r_list[i] + " "
        return result_s
    # leetcode12中自己实现字符串逆转
    def reverseString(self, s):
        """
        :type s: str
        :rtype: str
        """
        result = list(s)
        for i in range(len(result)//2):
            temp = result[len(result)-i-1]
            result[len(result)-i-1] = result[i]
            result[i] = temp
        return ''.join(result)
  • 提交结果
    image.png
  • 提交结果

测试数据:30组
运行时间:204ms
击败人百分比:2.89%

虽然beat的人不多,但我有想法,我骄傲啊~
感觉很酷,感觉很努力,现实很残酷,有没有这种感觉

五、疑惑

昨天立冬,天气是真的变冷了,大家要记得多穿衣服,别感冒哦~
不要忘记学习,不要忘记学习,不要忘记学习。

最近广告[互推和广告]有点多,干货比较少,希望大家谅解,说几点感悟
第一,互推,为了公众号能越做越好,必不可少的,个人的能力有限,不能每一篇文章都是爆文,所以见谅,而且我一般互推也都是python公众号,都是做公众号认识的朋友,所以才诚心推荐给大家的;

第二,接商业广告,学生党,花时间运营公众号不简单,做一篇推文可能花的5,6个小时,刚开始花两三天也是常有的事,生活不易,有合适的,不错的广告商,每一个广告商我都是深入了解了的,至少没有骗钱圈钱的机构,这样赚点生活费,我觉得不为过吧;

第三,关于文末鸡腿,点赞,转发,留言的事情,的确少的可怜,所以希望大家以后点开推文多帮帮忙,点一下,大家多互动,我的学习积极性也高些,可能这篇推文你学到的很少,说不定下篇就能学很多了呢?

第四,交流群,目前主要我一个人管理,还有一个研二的学长帮忙看一个群,忙不过来,回答大家问题慢了,也不要见怪,想加群的加我微信:zs820553471。

希望多多支持,在公众号上,要是说100%的心,我只能给大家50%,这50%无私分享学习,交流,剩下的50%,怪我,被利益和生活熏黑了。

六、结语

加我微信:zs820553471,备注:leetcode,加入专门的leetcode刷题交流群。
坚持 and 努力 : 终有所获。

相关文章
|
8月前
|
Go 索引
【LeetCode 热题100】394:字符串解码(详细解析)(Go语言版)
本文详细解析了 LeetCode 热题 394:字符串解码。题目要求对编码字符串如 `k[encoded_string]` 进行解码,其中 `encoded_string` 需重复 `k` 次。文章提供了两种解法:使用栈模拟和递归 DFS,并附有 Go 语言实现代码。栈解法通过数字栈与字符串栈记录状态,适合迭代;递归解法则利用函数调用处理嵌套结构,代码更简洁。两者时间复杂度均为 O(n),但递归需注意栈深度问题。文章还总结了解题注意事项及适用场景,帮助读者更好地掌握字符串嵌套解析技巧。
209 6
|
9月前
|
存储 机器学习/深度学习 缓存
🚀 力扣热题 394:字符串解码(详细解析)(Go语言版)
文章提供了两种解法:栈结构和递归解法。栈解法通过维护数字栈与字符串栈,依次处理 `[` 和 `]`,构造解码结果;递归解法则利用函数调用逐层解析嵌套结构。两者时间复杂度均为 $O(n)$,空间复杂度也为 $O(n)$。栈解法直观易懂,适合初学者;递归解法优雅简洁,适合处理深度嵌套规则。掌握这两种方法,可灵活应对类似问题,提升解题能力。
288 11
|
C++
Leetcode第43题(字符串相乘)
本篇介绍了一种用C++实现的字符串表示的非负整数相乘的方法,通过逆向编号字符串,将乘法运算转化为二维数组的累加过程,最后处理进位并转换为字符串结果,解决了两个大数相乘的问题。
120 9
|
JavaScript
力扣3333.找到初始输入字符串Ⅱ
【10月更文挑战第9天】力扣3333.找到初始输入字符串Ⅱ
162 1
|
算法 C++
Leetcode第八题(字符串转换整数(atoi))
这篇文章介绍了LeetCode上第8题“字符串转换整数(atoi)”的解题思路和C++的实现方法,包括处理前导空格、正负号、连续数字字符以及整数溢出的情况。
175 0
Leetcode(最后一个单词长度)
这篇文章介绍了两种解决LeetCode第58题的方法,即计算给定字符串中最后一个单词的长度,方法包括翻转字符串和逆向遍历统计。
95 0
【LeetCode 22】459.重复的子字符串
【LeetCode 22】459.重复的子字符串
135 0
【LeetCode 20】151.反转字符串里的单词
【LeetCode 20】151.反转字符串里的单词
117 0
【LeetCode 19】541.反转字符串II
【LeetCode 19】541.反转字符串II
104 0
【LeetCode 18】6.2.反转字符串
【LeetCode 18】6.2.反转字符串
90 0

热门文章

最新文章