zoukankan      html  css  js  c++  java
  • leetcode :541. 反转字符串 II

    给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。

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

    示例:

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

    提示:

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

    思路:

    1.k = 1时,无反转操作,直接返回原字符串

    2.k > 1时,将字符串转为char[] ,分段处理,每次计算出beginInx和endInx,然后进行局部反转即可

    注意:计算endInx时,考虑结束位置的处理,即,当剩余长度不足k时,endInx为charArray.lengrh - 1

    实现:

    class Solution {
        public String reverseStr(String s, int k) {
            if(k == 1)  return s;
            char[] charArr = s.toCharArray();
            int num = 0;
            while(true){
                int beginInx = 2 * k * num;
                int endInx = reverseCharArr(charArr,beginInx,k);
                if(endInx == charArr.length - 1)  break;
                num++;
            }
            return  String.valueOf(charArr);
        }
    
        private int reverseCharArr(char[] charArr,int beginInx,int k){
            int endInx = charArr.length - 1 - beginInx >= k ? beginInx + k - 1 : charArr.length - 1;
            int endInxChange = endInx;
            for(int i = beginInx ; i<endInxChange;i++){
                char tem = charArr[i];
                charArr[i] = charArr[endInxChange];
                charArr[endInxChange] = tem;
                endInxChange--;
            }
            return endInx;
        }
    }
    

      

    class Solution {
        public String reverseStr(String s, int k) {
            if(k == 1)  return s;
            char[] charArr = s.toCharArray();
            int num = 0;
            while(true){
                int beginInx = 2 * k * num;
                int endInx = reverseCharArr(charArr,beginInx,k);
                if(endInx == charArr.length - 1)  break;
                num++;
            }
            return  String.valueOf(charArr);
        }

        private int reverseCharArr(char[] charArr,int beginInx,int k){
            int endInx = charArr.length - 1 - beginInx >= k ? beginInx + k - 1 : charArr.length - 1;
            int endInxChange = endInx;
            for(int i = beginInx ; i<endInxChange;i++){
                char tem = charArr[i];
                charArr[i] = charArr[endInxChange];
                charArr[endInxChange] = tem;
                endInxChange--;
            }
            return endInx;
        }
    }
  • 相关阅读:
    [Java]用于将链表变成字符串并在元素之间插入分隔符的有用函数“String.join”
    Sql语法树示例 select username, ismale from userinfo where age > 20 and level > 5 and 1 = 1
    [Java]一段尚未雕琢的分词代码
    day44_Oracle学习笔记_03
    day43_Oracle学习笔记_02
    WinXP系统中的Oracle数据库如何以管理员身份登录
    Oracle 10G安装指导
    20个Linux服务器性能调优技巧
    Linux 上使用 Gmail SMTP 服务器发送邮件通知
    Netdata Linux下性能实时监测工具
  • 原文地址:https://www.cnblogs.com/wangzepu/p/12911853.html
Copyright © 2011-2022 走看看