ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

leetcode【字符串—简单】541.反转字符串 II

2021-10-21 23:58:15  阅读:199  来源: 互联网

标签:字符 String 反转 chars curPos II 541 字符串 leetcode


文章目录

前言

哈喽,我是长路,目前刚刚大三,方向是后端也偶尔捣鼓下前端,现在的主语言是Java。之前一大段时间都是在学习web开发的一些技术,就很久没有进行类似于数据结构、算法之类的学习与刷题,打算这段时间拾起来好好学一学、搞一搞。

这段时间也是机缘巧合看到草帽路飞的博客,加了自学群,正巧看到博主组织在群里组织了leetcode刷题打卡活动,我也就参与进来,为期一个月,打算坚持每天都花一些时间做一些题目,并通过博客的方式来进行记录。

目前跟着一个Github仓库刷题(leetcode):代码随想录leetcode刷题,当前为字符串专题。



题目

题目来源leetcode

leetcode地址:541. 反转字符串 II,难度:简单。

题目描述(摘自leetcode):

给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
 
示例 1:
输入:s = "abcdefg", k = 2
输出:"bacdfeg"
    
示例 2:
输入:s = "abcd", k = 2
输出:"bacd"

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

本地调试代码:

class Solution {
    public String reverseStr(String s, int k) {
        ...
    }

    public static void main(String[] args) {
        System.out.println(new Solution().reverseStr("abcdefg", 2));
    }

}


题解

思路:每次移动2*k,若是移动的位置在当前字符数组范围内对前k个进行反转,这是个循环过程。若是不在范围内,就要额外来处理两种情况。①剩余字符少于k个,剩余字符全部反转。②大于等于k个,小于2k个就反转前k个字符。详细可见代码

代码

public String reverseStr(String s, int k) {
    int curPos = 2 * k;
    char[] chars = s.toCharArray();
    //每次循环2*k个字符
    while (curPos <= s.length()) {
        reverse(chars, curPos - 2 * k, curPos - k - 1);
        curPos += 2 * k;
    }
    //判断是否有剩余字符
    if ((curPos - 2 * k) <= s.length()) {
        //剩余>=k <2*k情况,反转前面k个
        if (curPos - k <= s.length()) {
            reverse(chars, curPos - 2 * k, curPos - k - 1);
        } else {
            //反转剩余的全部
            reverse(chars, curPos - 2 * k, s.length() - 1);
        }

    }
    return new String(chars);
}

//反转字符串
public void reverse(char[] chars, int left, int right) {
    while (left < right) {
        chars[left] ^= chars[right];
        chars[right] ^= chars[left];
        chars[left++] ^= chars[right--];
    }
}

image-20211021221127215



参考文章

[1]. leetcode题解

[2]. 代码随想录—541. 反转字符串II



我是长路,感谢你的耐心阅读。如有问题请指出,我会积极采纳!
欢迎关注我的公众号【长路Java】,分享Java学习文章及相关资料
Q群:851968786 我们可以一起探讨学习
注明:转载可,需要附带上文章链接

标签:字符,String,反转,chars,curPos,II,541,字符串,leetcode
来源: https://blog.csdn.net/cl939974883/article/details/120897240

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有