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

LeetCode 541 反转字符串 II 简单

题目 - 点击直达

  • 1. 541 反转字符串 II 简单
    • 1. 题目详情
      • 1. 原题链接
      • 2. 题目要求
      • 3. 基础框架
    • 2. 解题思路
      • 1. 思路分析
      • 2. 时间复杂度
      • 3. 代码实现

1. 541 反转字符串 II 简单

1. 题目详情

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

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

1. 原题链接

LeetCode 541 反转字符串 II 简单

2. 题目要求

示例 1:
输入:s = “abcdefg”, k = 2
输出:“bacdfeg”

示例 2:
输入:s = “abcd”, k = 2
输出:“bacd”

提示:
1 <= s.length <= 104
s 仅由小写英文组成
1 <= k <= 104

3. 基础框架

● Cpp代码框架

class Solution {
public:
    string reverseStr(string s, int k) {
};

2. 解题思路

1. 思路分析

( 1 ) (1) (1) 一个变量 s t a r t start start记录需要逆置的部分的起始下标;
( 2 ) (2) (2) 计算从 s t a r t start start下标开始剩余的字符数量 n u m num num,对 n u m num num进行判断;
( 3 ) (3) (3) n u m num num 大于等于 2 ∗ k 2*k 2k ,则逆置从 s t a r t start start开始的前 k k k个字符,start更新加上 2 ∗ k 2*k 2k
( 4 ) (4) (4) n u m num num 小于 2 ∗ k 2*k 2k但大于等于 k k k,则逆置从 s t a r t start start开始的前 k k k个字符,此时是最后一次逆置, s t a r t start start更新为整个字符串的大小;
( 5 ) (5) (5) n u m num num小于 k k k,则逆置从 s t a r t start start开始的剩余字符,此时是最后一次逆置, s t a r t start start更新为整个字符串的大小;

2. 时间复杂度

O ( N / k ) O(N/k) O(N/k)
每次处理 2 ∗ k 2*k 2k个字符,长度为n的字符串处理 n / ( 2 ∗ k ) + 1 n/(2*k) + 1 n/(2k)+1次;

3. 代码实现

class Solution {
public:
    string reverseStr(string s, int k) {
        // [0, 2k-1]
        // [2k, 4k-1]
        // [4k, 6k-1]
        // ...
        // start
        int start = 0;
        while(start < s.size()){
            if(s.size() - start >= 2 * k){
                reverse(s.begin() + start, s.begin() + start + k);
                start += 2 * k;
            }
            else if(s.size() - start >= k){
                reverse(s.begin() + start, s.begin() + start + k);
                start = s.size();
            }
            else{
                reverse(s.begin() + start, s.end());
                start = s.size();
            }
        }
        return s;
    }
};


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

相关文章:

  • macOS 设置固定IP
  • 【智谱开放平台-注册/登录安全分析报告】
  • Python酷库之旅-第三方库Pandas(206)
  • Rust 中的 match 基本用法
  • Spring Boot集成SQL Server快速入门Demo
  • C++常用的特性-->day05
  • Python——PyQt5以及Pycharm相关配置
  • MyBatis的使用(XML映射文件)
  • review-java-basis
  • Centos7 Linux系统下生成https的crt和key证书
  • 【已解决】VSCode运行C#控制台乱码显示
  • IDE的组成
  • 解决:谷歌浏览器访问http时,自动转https访问的问题
  • Jtti:Apache服务的反向代理及负载均衡怎么配置
  • 宝塔安装mongodb插件失败的解决办法
  • RabbitMQ如何保证消息不丢失呢?
  • 在 Windows 用 Chrome System Settings 设置代理
  • WebClient, HttpClient, OkHttp: 三个Java HTTP客户端的比较
  • 设计模式——策略模式(Strategy Pattern)+ Spring相关源码
  • Mysql8.1.0 windows 绿色版安装
  • L99SM81V
  • 画时钟(turtle库)
  • Postman的使用
  • javascript中各种风骚的代码
  • Redis快速上手篇七(集群-六台虚拟机)
  • 杂牌行车记录仪特殊AVI结构恢复案例