package com.zmz.algorithm.string;

/**
 * @author 张明泽
 * Create by 2022/5/25 18:52
 * 反转字符串II
 * LeetCode-541
 */
public class ReverseString2 {
    public static void main(String[] args) {
        String str = "abcdfd";
        int target = 2;
        System.out.println(reverse(str,target));
    }

    /**
     * 题读了半天没读懂,不会舍弃, x < k 全部翻转, k < x < 2k 反转k个
     * 这种判断是否越界的用 Math.min 去找到满足的条件
     * 双指针解法
     */
    public static String reverse(String str, int target) {
        char[] nums = str.toCharArray();
        int number = target * 2;
        for (int i = 0; i < str.length(); i = i + number) {
            int left = i;
            int right = Math.min(str.length() - 1, left + target - 1);
            while (left < right) {
                nums[left] ^= nums[right];
                nums[right] ^= nums[left];
                nums[left] ^= nums[right];
                left++;
                right--;
            }
        }
        return new String((nums));
    }
}
最后修改:2022 年 05 月 27 日 07 : 08 AM
赏杯咖啡喝 谢谢您~