541-反转字符串 II

给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样。

示例:

输入: s = "abcdefg", k = 2
输出: "bacdfeg"

要求:

  1. 该字符串只包含小写的英文字母。
  2. 给定字符串的长度和 k 在[1, 10000]范围内。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-string-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    // 不借助API,最快
    public String reverseStr(String s, int k) {
        char[] a = s.toCharArray();
        for (int start = 0; start < a.length; start += 2 * k) {
            int i = start;
            int j = Math.min(start + k - 1, a.length - 1);
            while (i < j) {
                char tmp = a[i];
                a[i++] = a[j];
                a[j--] = tmp;
            }
        }
        return new String(a);
    }
    public String reverseStr_2(String s, int k) {
        // 全部反转
        StringBuilder reverse = new StringBuilder(s).reverse();

        int len = s.length();
        int loop = len / (2 * k);
        int i = 0;

        StringBuilder res = new StringBuilder();
        while (loop > 0) {
            res.append(reverse, len - k - i, len - i).append(s, k + i, 2 * k + i);
            i += 2 * k;
            loop--;
        }

        int remain = len - i;
        if (remain < k) {
            res.append(reverse, 0, remain);
        } else {
            res.append(reverse, len - k - i, len - i).append(s, k + i, len);
        }
        return res.toString();
    }

比上面一个快点:只反转需要反转的部分

    public String reverseStr_1(String s, int k) {
        // 遍历,反转,拼接
        int len = s.length();
        int loop = len / (2 * k);
        StringBuilder res = new StringBuilder();
        while (loop > 0) {
            res.append(new StringBuilder(s.substring(0, k)).reverse()).append(s, k, 2 * k);
            s = s.substring(2 * k);
            loop--;
        }

        StringBuilder sb = new StringBuilder(s);
        if (sb.length() < k) {
            res.append(sb.reverse());
        } else {
            res.append(new StringBuilder(s.substring(0, k)).reverse()).append(s.substring(k));
        }
        return res.toString();
    }

541-反转字符串 II的更多相关文章

  1. LeetCode 541. 反转字符串 II(Reverse String II)

    541. 反转字符串 II 541. Reverse String II

  2. Java实现 LeetCode 541 反转字符串 II(暴力大法)

    541. 反转字符串 II 给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转.如果剩余少于 k 个字符,则将剩余的所有全部反转.如果有小于 2k 但大于或 ...

  3. 刷题-力扣-541. 反转字符串 II

    541. 反转字符串 II 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reverse-string-ii 著作权归领扣网络所有. ...

  4. 代码随想录第八天 |344.反转字符串 、541. 反转字符串II、剑指Offer 05.替换空格 、151.翻转字符串里的单词 、剑指Offer58-II.左旋转字符串

    第一题344.反转字符串 编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 s 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的额外空间解决这 ...

  5. 力扣541. 反转字符串 II

    原题 1 class Solution: 2 def reverseStr(self, s: str, k: int) -> str: 3 begin,lens,ans = 0,len(s),' ...

  6. 【算法训练营day8】LeetCode344. 反转字符串 LeetCode541. 反转字符串II 剑指Offer05. 替换空格 LeetCode151. 翻转字符串里的单词 剑指Offer58-II. 左旋转字符串

    [算法训练营day8]LeetCode344. 反转字符串 LeetCode541. 反转字符串II 剑指Offer05. 替换空格 LeetCode151. 翻转字符串里的单词 剑指Offer58- ...

  7. 541 Reverse String II 反转字符串 II

    给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转.如果剩余少于 k 个字符,则将剩余的所有全部反转.如果有小于 2k 但大于或等于 k 个字符,则反转前 ...

  8. LeetCode 541. Reverse String II (反转字符串 II)

    Given a string and an integer k, you need to reverse the first k characters for every 2k characters ...

  9. [Swift]LeetCode541. 反转字符串 II | Reverse String II

    Given a string and an integer k, you need to reverse the first k characters for every 2k characters ...

  10. Q541 反转字符串 II

    给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转.如果剩余少于 k 个字符,则将剩余的所有全部反转.如果有小于 2k 但大于或等于 k 个字符,则反转前 ...

随机推荐

  1. codewars--js--the highest and lowest number + JS 字符串和数组相关知识

    本文参考: http://blog.csdn.net/tyrionj/article/details/78653426 http://www.runoob.com/jsref/jsref-obj-st ...

  2. git系列之---将本地的项目添加到码云仓库

    1.前情: 本地写的 Demo 传到码云上面进行维护. 2.操作步骤: git init   将本地文件初始化为git 仓库,文件件会多一个 .git 文件夹[版本库]: git add .   或者 ...

  3. Android Studio 学习笔记(四):Adapter和RecyclerView说明

    在现版本中,滚动控件有多种,而相比于ListView,GridView,RecyclerView的用途更广,因此将前两者作为Adapter适配器的引入,再对RecyclerView进行简单讲解. MV ...

  4. App工程结构

    在经过千辛万苦各种填坑终于安装好了Android Studio之后,在其自带的模拟器上成功运行了第一个APP(hello world),通过这个APP首先研究了一下APP基本的工程结构,从而使后面的开 ...

  5. 百度大脑发布“AI开发者‘战疫’守护计划”,AI支援抗疫再升级

    面对新冠肺炎疫情,AI开发者们正在积极运用算法.算力.软件等“武器”助力抗疫.针对开发者们在疫情防控期间的开发与学习需求,2月6日,百度大脑推出“AI开发者‘战疫’守护计划”, 正在进行疫情防控相关应 ...

  6. linux安装python3环境并配置虚拟环境

    1.安装必要库 yum -y install gcc yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite- ...

  7. Android Studio 快捷方式记录

  8. 三维重建(一):colmap安装与使用

    Image-based 3D Reconstruction from Scratch (using COLMAP) 本文将介绍COLMAP的安装与使用,重点介绍3D重建过程中每个步骤的输入输出. 一. ...

  9. Spring Boot源码(四):Bean装配

    为了演示Spring中对象是如何创建并放到spring容器中,这里新建一个maven项目: 其中pom.xm文件中只引入了一个依赖: <dependencies> <dependen ...

  10. P4939 Agent2

    链接:P4939 ------------------------------------------------ 这道题肯定是数据结构题. ----------------------------- ...