本文主要是介绍leetcode 541. 反转字符串 II(Java版),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
https://leetcode-cn.com/problems/reverse-string-ii/
题解
题目不难,但描述的比较晦涩,简单来说就是:
隔 k 个,swap k 个;
隔 k 个,swap k 个;
…
如果 swap 的时候不足 k 个,则有多少 swap 多少。
/*** 给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。* 如果剩余字符少于 k 个,则将剩余字符全部反转。* 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。*/
public class Solution {public static String reverseStr(String s, int k) {char[] chars = s.toCharArray();int left = 0, right = k - 1;int turn = 1;// 隔 k 个,swap k 个while (right < chars.length) {if (turn > 0) { // swap from left to rightfor (int i = 0; i <= (right - left) / 2; i++) {char t = chars[left + i];chars[left + i] = chars[right - i];chars[right - i] = t;}}left += k;right += k;turn *= -1;}// 如果 swap 的时候不足 k 个,则有多少 swap 多少if (left < chars.length && turn > 0) {int new_right = chars.length - 1;for (int i = 0; i <= (new_right - left) / 2; i++) {char t = chars[left + i];chars[left + i] = chars[new_right - i];chars[new_right - i] = t;}}return new String(chars);}public static void main(String[] args) {System.out.println(reverseStr("abcdefghijklmn", 3));}
}
这篇关于leetcode 541. 反转字符串 II(Java版)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!