当前位置: 代码迷 >> 综合 >> leetcode-Algorithms-541|反转字符串 II
  详细解决方案

leetcode-Algorithms-541|反转字符串 II

热度:5   发布时间:2023-12-12 11:22:17.0

原题

给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。示例 1:输入:s = "abcdefg", k = 2
输出:"bacdfeg"
示例 2:输入:s = "abcd", k = 2
输出:"bacd"提示:1 <= s.length <= 104
s 仅由小写英文组成
1 <= k <= 104来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-string-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

取余,取整,分别截取,然后反转。

代码

public class Solution_541 {
    public static void main(String[] args) {
    System.out.println(reverseStr("abcdefg", 1));}public static String reverseStr(String s, int k) {
    StringBuilder sb = new StringBuilder();int countLength = s.length();int x = countLength % (2 * k);int y = countLength / (2 * k);for (int i = 0; i < y; i++) {
    StringBuilder copy1 = new StringBuilder(s.substring(i *2* k, i *2* k + k));String copy2 = s.substring(i *2* k + k, i *2* k + 2 * k);sb.append(copy1.reverse());sb.append(copy2);}if (x > k) {
    StringBuilder copy1 = new StringBuilder(s.substring(y * 2 * k, y * 2 * k + k));String copy2 = s.substring(y * 2 * k + k, y * 2 * k + x);sb.append(copy1.reverse());sb.append(copy2);} else if (x <= k) {
    StringBuilder copy1 = new StringBuilder(s.substring(y * 2* k, y * 2* k + x));sb.append(copy1.reverse());}return sb.toString();}
}