首页 > 编程语言 >代码随想录算法训练营第八天|leetcode344.反转字符串、leetcode541. 反转字符串II、卡码网54. 替换数字

代码随想录算法训练营第八天|leetcode344.反转字符串、leetcode541. 反转字符串II、卡码网54. 替换数字

时间:2024-10-23 10:58:39浏览次数:1  
标签:反转 self 随想录 Solution str 字符串 def

1 leetcode344.反转字符串

题目链接:344. 反转字符串 - 力扣(LeetCode)

文章链接:代码随想录

视频链接:字符串基础操作! | LeetCode:344.反转字符串_哔哩哔哩_bilibili

自己的思路:直接使用python的内置函数reverse进行一个操作

1.1 自己的代码

1.1.1 python的内置函数
class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        return s.reverse()
1.1.2 使用链表的方法
class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        left = 0
        right = len(s)-1
        while left<right:
            s[left],s[right] = s[right],s[left]
            left +=1
            right -=1

1.2 看文章后的思路

补充几种我目前没有想到的思路,但是我觉得也非常可行

1.2.1 切片的方法
class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        s[:] = s[::-1]
1.2.2使用循环
class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        n = len(s)
        for i in range(n//2):
            s[i],s[n-i-1]=s[n-i-1],s[i]

1.3 本题小结

  1. 这种比较容易的题目,如果可以不用内置函数,尽可能的不要使用里面的内置函数,其实还有很多方法也可以解决
  2. 那就浅浅记录一下自己第一次同一道题用了两种方法啦

2 leetcode541. 反转字符串II

题目链接:541. 反转字符串 II - 力扣(LeetCode)

文章链接:代码随想录

视频链接:字符串操作进阶! | LeetCode:541. 反转字符串II_哔哩哔哩_bilibili

自己的思路:这道题是有思路,但是写的时候就很头疼,而且代码内的内容无法写通,有一种很乱的感觉,嗯,自己没写出来这道题

2.1 看视频后的思路

2.1.1 根据C++思路转换的代码

这道题和C++语法不一样的地方就是,字符串内部不能进行直接的反转操作,所以就需要先将其转换为一个列表,然后对列表2*k长度数据的前k个数据进行翻转

class Solution:
    def reverseStr(self, s: str, k: int) -> str:
        s_list = list(s)
        for i in range(0,len(s_list),2*k):
            if i+k<=len(s_list):
                s_list[i:i+k]= reversed(s_list[i:i+k])
            else:
                s_list[i:] = reversed(s_list[i:])
        return ''.join(s_list)
2.1.2 文章内代码的理解

虽然字符串内部不能直接进行一个迭代的操作,但是字符串对其进行一个切片,切片位置的返回是可以变换的,因此也可进行另一种编码

class Solution:
    def reverseStr(self, s: str, k: int) -> str:
        p = 0
        while p<len(s):
            p2 = p+k
            s = s[:p]+s[p:p2][::-1]+s[p2:len(s)]
            p +=2*k
        return s
2.1.3 反转封装成一个函数

这种方法挺巧妙的,将上一道题的代码进行一个函数的封装,然后调用,但是还是需要将字符串转换成列表的形式

class Solution:
    def reverseStr(self, s: str, k: int) -> str:
        def substr(text):
            left = 0
            right = len(text)-1
            while left<right:
                text[left],text[right] = text[right],text[left]
                left +=1
                right -=1
            return text
        s = list(s)
        for i in range(0,len(s),2*k):
            s[i:i+k] = substr(s[i:i+k])
        return ''.join(s)

2.3 本题小结

  1. 这道题的一个注意点就是在字符串中不能直接进行循环,需要将其先转换为列表的形式,在进行循环遍历
  2. 不必每次都是加一循环遍历,循环也可以是多种的形式

3 卡码网54. 替换数字

题目链接:54. 替换数字(第八期模拟笔试)

文章链接:替换数字 | 代码随想录

自己的思路:这道题想的就是循环遍历,判断其是不是数字,如果是的话我就进行一个列表中的替换,否则就是直接循环

3.1 代码思路

s = input()
s = list(s)
for i in range(len(s)):
    if s[i].isdigit():
        s[i] = 'number'
print(''.join(s))

3.2 本题小结

  1. 字符串判断其是否为数字的方式是s[i].isdigitit()即可
  2. 感觉这一块的知识点相对而言要简单一点,做起来就顺利很多

4 今日小结

  1. python中的字符串是不能直接进行迭代替换的,这里今天第一次尝试的时候就报错了
  2. range函数在使用的过程中,其内部是(start,end,step)
  3. 字符串的题对我而言稍微熟悉一些,希望接下来学习也会让我越来越轻松吧

标签:反转,self,随想录,Solution,str,字符串,def
From: https://www.cnblogs.com/csfy0524/p/18495942

相关文章

  • MYSQL字符串中根据符号匹配固定字符
    如果您有一个字段存储的是多个值,例如分号分隔的字符串,而您仍然需要进行精准匹配,可以使用FIND_IN_SET函数,但需要注意FIND_IN_SET是基于逗号分隔的字符串。如果您的字段是分号分隔的,可以先将其转换为逗号分隔的字符串。假设users表的roles字段存储的是分号分隔的字符串 ......
  • 字符串哈希 学习笔记
    两种哈希的表示方式。设\(s_i\)为字符串内第\(i\)位,\(h_i\)表示字符串内\([1,i]\)的哈希值,\(p\)为模数,那么第一种哈希方式是:\(h_i=h_{i-1}*p+s_i\),即把\(h_i\)当作一个\(p\)进制数,加入\(s_i\)时在数的末尾。\(h_i=h_{i-1}+s_i*p^{i-1}\),即是在开头加入\(s_i\)......
  • 代码随想录算法训练营day22和day23 | 77. 组合 216.组合总和III 17.电话号码的字母
    学习资料:https://programmercarl.com/回溯算法理论基础.html回溯法backtracking:for循环控制递归数量,暴力搜索:组合、切割、子集、排列、棋盘今天学了组合和切割可以画个N叉树的图来帮助理解回溯过程组合又包括1.单个数组(要加startIndex参数)或多个数组;2.数组内有无重复元素;3.数......
  • 代码随想录算法训练营 | 图论理论基础,98. 所有可达路径
    图论理论基础1.图的种类:有向图,无向图,加权有向图,加权无向图;2.度:无向图中有几条边连接该节点,该节点就有几度,在有向图中,每个节点有出度和入度;出度:从该节点出发的边的个数;入度:指向该节点边的个数;3.连通图:在无向图中,任何两个节点都是可以到达的;强连通图:在有向图中,任何两个节点是可以......
  • NOIP2024集训Day58 字符串
    NOIP2024集训Day58字符串C.[CEOI2011]Matching发现要做的是排名串的匹配。考虑把它转成这个位置之前有多少个数小于当前这个数,这样就只要每个位置都对应相等的,那就一定是合法的。然后就可以类似KMP的预处理出一个\(nxt\)数组,然后再类似KMP的匹配。因为需要支持动态......
  • 使用 `com.google.gson` 库将 Java 对象转换为 JSON 字符串,并且确保 `data` 字段是 `M
    要使用com.google.gson库将Java对象转换为JSON字符串,并且确保data字段是Map<String,Object>类型的,你可以按照以下步骤编写一个示例代码。这个示例代码将创建一个包含data字段的Java对象,并将data字段初始化为一个Map<String,Object>,然后动态地向其中添加......
  • 代码随想录算法训练营Day42 | 完全背包理论基础、518.零钱兑换II、377. 组合总和 Ⅳ、
    目录完全背包理论基础518.零钱兑换II377.组合总和Ⅳ卡玛网57.爬楼梯(进阶版)完全背包理论基础题目52.携带研究材料(第七期模拟笔试)题目描述:小明是一位科学家,他需要参加一场重要的国际科学大会,以展示自己的最新研究成果。他需要带一些研究材料,但是他的行李箱空间......
  • 代码随想录算法训练营第七天|leetcode454.四数相加II、leetcode383. 赎金信 、leetcod
    1leetcode454.四数相加II题目链接:454.四数相加II-力扣(LeetCode)文章链接:代码随想录视频链接:学透哈希表,map使用有技巧!LeetCode:454.四数相加II_哔哩哔哩_bilibili自己的思路:第一反应就是暴力搜索,一层一层for循环来完成,就是会超时1.1自己的代码纯纯暴力搜索classSolutio......
  • 华为od面试手撕代码真题题型1——常规字符串,数组,矩阵
    常规字符串,数组,矩阵1实现超长数字减1思路:Java中用BigInteger类publicStringsubOne(Strings){ BigIntegerbi=newBigInteger(s);bi=bi.subtract(BigInteger.ONE);returnbi.toString();}2十八进制数比较大小任意进制的字符串a,转成十进制的数:In......
  • 【题解】Solution Set - NOIP2024集训Day58 字符串
    【题解】SolutionSet-NOIP2024集训Day58字符串https://www.becoder.com.cn/contest/5658「CF1466G」SongoftheSirens考虑对于\(s_i\),算钦定必须覆盖到\(t_i\)的匹配个数\(f_i\)。注意到\(s\)每次长度都会\(\times~2\)左右,其长度在\(O(\log|w|)\)的时候就......