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
© 允许规范转载