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

LeetCode541. Reverse String II -- 按步长反转字符串

描述

Given a string and an integer k, you need to reverse the first k characters for every 2k characters counting from the start of the string. If there are less than k characters left, reverse all of them. If there are less than 2k but greater than or equal to k characters, then reverse the first k characters and left the other as original.

Example:

Input: s = "abcdefg", k = 2
Output: "bacdfeg"

分析

这是一个字符串反转的问题,只是这里多了一个步长k的参数。如果前k个参数进行了反转,则后k个字符串不进行反转。因此我们可以设置一个标志位flag,如果为True,则对接下来k个字符串反转,否则保持原状。每k步对flag进行一次取反。

代码

class Solution:
    def reverseStr(self, s, k):
        """
        :type s: str
        :type k: int
        :rtype: str
        """
        flag = False
        temp = ""
        for i in range(0, len(s), k):
            flag = not flag
            stop = i+k
            if stop > len(s):
                stop = len(s)
            if flag:
                temp += s[i:stop][::-1]
            else:
                temp += s[i:stop]
        return temp

优化

看了下beats 100%的代码,以2k为步长,则每次迭代只需将反转之前的、反转的和反转之后的三部分加起来,即每2k个字符是一个子问题:

for idx in range(0, len(s), 2*k):
    s = s[:idx] + s[idx:idx+k][::-1] + s[idx+k:]
return s

相关文章:

  • 三菱加工中心CNC编程G代码讲解
  • MongoDB可视化工具--Robo 3T 使用教程
  • Php数据库
  • 项目集成springboot【JWordpres前台项目实战】
  • Sublime Text3 配置
  • ALTER SYSTEM ARCHIVELOG CURRENT挂起案例
  • Mblog 部署手册
  • iOS组件化(一):创建本地私有库
  • linux top 命令
  • HeyUI组件库发布vscode插件,PS教程: 如何开发vscode插件?
  • thinkphp3.2.3 定时任务重新加载, 无法加载新的定时任务的问题
  • PHP中使用Elasticsearch
  • WebView性能、体验分析与优化
  • MDT2013批量升级Win7客户端至Win10
  • 第22章,mysql数据库-1
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • Angular 响应式表单之下拉框
  • css的样式优先级
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • express如何解决request entity too large问题
  • JavaScript实现分页效果
  • Map集合、散列表、红黑树介绍
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • TCP拥塞控制
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 记一次和乔布斯合作最难忘的经历
  • 聊一聊前端的监控
  • 世界上最简单的无等待算法(getAndIncrement)
  • 温故知新之javascript面向对象
  • 用jquery写贪吃蛇
  • 在Unity中实现一个简单的消息管理器
  • (1)虚拟机的安装与使用,linux系统安装
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (zhuan) 一些RL的文献(及笔记)
  • (笔试题)分解质因式
  • (附源码)计算机毕业设计高校学生选课系统
  • (三)c52学习之旅-点亮LED灯
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (转载)从 Java 代码到 Java 堆
  • **PHP二维数组遍历时同时赋值
  • .apk 成为历史!
  • .gitignore
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET中GET与SET的用法
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚
  • [3300万人的聊天室] 作为产品的上游公司该如何?
  • [acwing周赛复盘] 第 94 场周赛20230311
  • [ASP]青辰网络考试管理系统NES X3.5
  • [C#]手把手教你打造Socket的TCP通讯连接(一)
  • [CareerCup][Google Interview] 实现一个具有get_min的Queue
  • [CodeForces-759D]Bacterial Melee
  • [Flex][问题笔记]TextArea滚动条问题
  • [HackMyVM]靶场 Quick3