欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

反转字符串

程序员文章站 2022-05-21 08:19:41
...
package com.beantechs.cpsp.online.controller.voilation;

/**
 * @Author:刘赵强
 * @Date:2021/8/20 14:04
 * @Description: 给定一个字符串 s 和一个整数 k,从字符串开头算起,每 2k 个字符反转前 k 个字符。
 * <p>
 * 如果剩余字符少于 k 个,则将剩余字符全部反转。
 * 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
 * <p>
 * <p>
 * <p>
 * 来源:力扣(LeetCode)
 * 链接:https://leetcode-cn.com/problems/reverse-string-ii
 * 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
 **/
public class Demo3 {
    public static void main(String[] args) {
        System.out.println(reverseStr("abcdefg",2));
    }


    public static String reverseStr(String s, int k) {
        int n = s.length();
        char[] arr = s.toCharArray();
        for (int i = 0; i < n; i += 2 * k) {
            reverse(arr, i, Math.min(i + k, n) - 1);
        }
        return new String(arr);
    }

    public static void reverse(char[] arr, int left, int right) {
        while (left < right) {
            char temp = arr[left];
            arr[left] = arr[right];
            arr[right] = temp;
            left++;
            right--;
        }
    }




    public static String reverseStr2(String str, int k) {
        int count = str.length()/(2*k);
        StringBuilder sb = new StringBuilder(str.length());
        for (int i = 0; i < count; i++) {
            String strGroup = str.substring(2*k*i,2*k*(i+1));
            System.out.println(strGroup);
            String str1 = strGroup.substring(0,k);
            System.out.println("str1=="+str1);
            String str2 = strGroup.substring(k);
            System.out.println("str2=="+str2);
            sb.append(reverse(str1)).append(str2);
        }
        String suffix = str.substring(count*2*k);
        if(suffix.length()>=k){
            sb.append(reverse(suffix.substring(0,k)));
            sb.append(suffix.substring(k));
        }else{
            sb.append(reverse(suffix));
        }
        return sb.toString();
    }

    /**
     * 将str字符串反转
     *
     * @param str
     * @return
     */
    public static String reverse(String str) {
        return new StringBuilder(str).reverse().toString();
    }
}

相关标签: 力扣 力扣