代码随想录算法训练营第七天 | 字符串 | 344 反转字符串 | 541 反转字符串II | 05 替换空格 | 151 翻转字符串里的单词 | 58-II左旋转字符串

344 反转字符串

344 反转字符串-资料链接

解题思路

就像反转链表,使用双指针

class Solution(object):
    def reverseString(self, s):
        """
        :type s: List[str]
        :rtype: None Do not return anything, modify s in-place instead.
        """
        small=0
        max=len(s)-1
        while small<max:
            s[small],s[max]=s[max],s[small]
            small+=1
            max-=1


if __name__=="__main__":
    s = ["h", "e", "l", "l", "o"]
    solu=Solution()
    solu.reverseString(s)
    print(s)

541 反转字符串II

541 反转字符串II-资料链接

解题思路

其实和第一题大同小异,主要是考虑cur的变化

class Solution(object):
    def reverseStr(self, s, k):
        """
        :type s: str
        :type k: int
        :rtype: str
        """
        def rever(s,cur,k):
            small=cur
            max=k
            while small<max:
                s[small],s[max]=s[max],s[small]
                small+=1
                max-=1

        s_list=list(s)

        lenth=len(s_list)
        cur=0
        while cur+2*k<=lenth:
            rever(s_list,cur,cur+k-1)
            cur=cur+2*k
        if cur+2*k>lenth:
            if lenth-cur>k:
                rever(s_list,cur,cur+k-1)
            else:
                rever(s_list,cur,lenth-1)

        s=''.join(s_list)
        return s



if __name__=="__main__":
    s="abcdefg"
    k=1
    solu=Solution()
    print(solu.reverseStr(s,k))
    # 输出:"bacdfeg"

05 替换空格

05 替换空格-资料链接

解题思路

string 不能修改值,但是list可以,把string改为list即可

class Solution(object):
    def replaceSpace(self, s):
        """
        :type s: str
        :rtype: str
        """
        s_list=list(s)
        i=0
        while i < len(s_list):
            if s_list[i] ==" ":
                s_list[i]="%20"
            i+=1
        s="".join(s_list)
        return s


if __name__=="__main__":
    # 输入:s = "We are happy."
    # 输出:"We%20are%20happy."
    s = "We are happy."
    solu=Solution()
    print(solu.replaceSpace(s))

151 翻转字符串里的单词

151 翻转字符串里的单词-资料链接

解题思路

先将空格去掉,然后将+整个反转,再将单词反转,注意还要去掉单词中间的空格

class Solution(object):
    def reverseWords(self, s):
        """
        :type s: str
        :rtype: str
        """
        def reverse(s,small,max):
            while small < max:
                s_list[small], s_list[max] = s_list[max], s_list[small]
                small += 1
                max -= 1

        start=0
        end=len(s)-1
        s_list=list(s)


        # 去除空格
        while s_list[start]==" ":
            start+=1
        while s_list[end]==" ":
            end-=1

        # 反转
        small=start
        max=end
        reverse(s_list,small,max)

        # 反转单词
        cur=start
        next=cur
        while next!=end:
            if s_list[next]==" ":
                reverse(s_list,cur,next-1)

                if next+1<end and s_list[next+1]==" ":
                    next+=1
                    while s_list[next]==" ":
                        s_list.pop(next)
                        end-=1

                if s_list[next]!=" ":
                    cur=next

                else:
                    cur=next+1
                    next=cur

            else:
                next+=1


            if next==end:
                reverse(s_list, cur, next)

        s="".join(s_list[start:end+1])
        return s





if __name__=="__main__":
    solu=Solution()
    s = "example   good a"
    print(solu.reverseWords(s))

58-II左旋转字符串

58-II左旋转字符串-资料链接

解题思路

找到开始交换的那个节点,然后将两个字符串拼起来即可

class Solution(object):
    def reverseLeftWords(self, s, n):
        """
        :type s: str
        :type n: int
        :rtype: str
        """
        # b=list("umgh")
        # a=list("lrlose")
        # print("".join(b+a))
        s_list=list(s)
        start=n
        a=[]
        while start<len(s_list):
            a.append(s_list[start])
            start+=1

        s="".join(a+s_list[0:n])
        return s


if __name__=="__main__":
    # 输入: s = "lrloseumgh", k = 6
    # 输出: "umghlrlose"
    s="lrloseumgh"
    k=6
    solu=Solution()
    solu.reverseLeftWords(s,k)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
代码随想录算法训练营是一个优质的学习和讨论平台,提供了丰富的算法训练内容和讨论交流机会。在训练营中,学员们可以通过观看视频讲解来学习算法知识,并根据讲解内容进行刷题练习。此外,训练营还提供了刷题建议,例如先看视频、了解自己所使用的编程语言、使用日志等方法来提高刷题效果和语言掌握程度。 训练营中的讨论内容非常丰富,涵盖了各种算法知识点和解题方法。例如,在第14天的训练营中,讲解了二叉树的理论基础、递归遍历、迭代遍历和统一遍历的内容。此外,在讨论中还分享了相关的博客文章和配图,帮助学员更好地理解和掌握二叉树的遍历方法。 训练营还提供了每日的讨论知识点,例如在第15天的讨论中,介绍了层序遍历的方法和使用队列来模拟一层一层遍历的效果。在第16天的讨论中,重点讨论了如何进行调试(debug)的方法,认为掌握调试技巧可以帮助学员更好地解决问题和写出正确的算法代码。 总之,代码随想录算法训练营是一个提供优质学习和讨论环境的平台,可以帮助学员系统地学习算法知识,并提供了丰富的讨论内容和刷题建议来提高算法编程能力。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [代码随想录算法训练营每日精华](https://blog.csdn.net/weixin_38556197/article/details/128462133)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值