当前位置: 首页 > article >正文

leetcode_双指针 541. 反转字符串 II

541. 反转字符串 II

  • 给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

  • 如果剩余字符少于 k 个,则将剩余字符全部反转。

  • 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样

1.切片法: 通俗易懂, 代码简洁, 调试容易

class Solution(object):
    def reverseStr(self, s, k):
        """
        :type s: str
        :type k: int
        :rtype: str
        """
        # 将字符串转换为列表方便操作
        s = list(s)
        
        # 遍历字符串(以2k为步长)
        for i in range(0, len(s), 2*k):
            # 如果剩余部分小于 k 个字符,反转所有剩余字符
            if len(s) - i < k:
                s[i:] = s[i:][::-1]
            # 如果剩余部分大于等于 k 且小于 2k,反转前 k 个字符
            elif len(s) - i >= k and len(s) - i < 2*k:
                s[i:i + k] = s[i:i + k][::-1]
            # 如果剩余部分大于等于 2k,反转前 k 个字符
            else:
                s[i:i + k] = s[i:i + k][::-1]

        # 将列表转换回字符串并返回
        return ''.join(s)
  • 时间复杂度: O(n)
  • 空间复杂度: O(n)

2.双指针: 更加节省空间, 但调试较难

class Solution(object):
    def reverseStr(self, s, k):
        """
        :type s: str
        :type k: int
        :rtype: str
        """
        s = list(s)
        
        # 遍历每 2k 个字符
        for i in range(0, len(s), 2*k):
            # 反转前 k 个字符
            left, right = i, min(i + k - 1, len(s) - 1)  # 右边界不能超过字符串长度
            
            while left < right:
                s[left], s[right] = s[right], s[left]
                left += 1
                right -= 1
        
        # 将列表转换回字符串并返回
        return ''.join(s)
  • 时间复杂度: O(n)
  • 空间复杂度: O(n)

http://www.kler.cn/a/536431.html

相关文章:

  • 检索式知识库问答相关研究调研
  • 部署LLM模型到云端
  • 基于CLIP视觉语言大模型的行人重识别方法的简单框架设计
  • 【1】高并发导出场景下,服务器性能瓶颈优化
  • innoDB 如何解决幻读
  • 自己实现的一个缓存数据库(搞着玩) .net Core/6/8/9
  • KAFKA-UI升级教程,因旧版本不支持(KAFKA-3.8.0 开启SASL认证)
  • Python基于Django的课堂投票系统的设计与实现【附源码】
  • Linux系统用户分类、UID与GID的区别、用户管理的基础命令
  • 【AIGC魔童】DeepSeek v3提示词Prompt书写技巧
  • 深度学习|表示学习|训练优化方法|Nesterov动量一定比基础的Momentum更好吗?|22
  • 基于LMStudio本地部署DeepSeek R1
  • elasticsearch安装插件analysis-ik分词器(深度研究docker内elasticsearch安装插件的位置)
  • Deepseek-v3 / Dify api接入飞书机器人go程序
  • 你是否想过,让AI像人类一样协作竞争?——展望智能体协作新范式
  • 数据结构-基础
  • 华为昇腾报:aclrtMemMallocPolicy:ACL_MEM_MALLOC_HUGE_FIRST
  • 三极管的截止、放大、饱和区
  • python2048游戏
  • 分形的魅力:数学与艺术的完美结合
  • C基础(七) 指针和二维数组、数组指针
  • 开源CodeGPT + DeepSeek-R1 是否可以替代商业付费代码辅助工具
  • Node.js 实现简单爬虫
  • RK3568平台开发系列讲解(ConfigFS篇)ConfigFS核心数据结构
  • jvm 篇
  • 匿名函数无法移除事件监听?