给定一个字符串
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
java 解题以及思路
package com.java.leetcode.string;
/**
* 题目描述:
* 给定一个字符串 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给定一个字符串 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
*/
public class reverseStr541 {
public String reverseStr(String s, int k) {
/**
* 由题目描述可得
* 可以 得出 left 和 right index的位置 距离为 k个距离 奇数个k 为跳跃点 0~k-1 k~2k-1,2k~3k-1 以此类推
* 那么可以对 判断字符串长度中含有多少个k 并赋值
*/
char[] ch = s.toCharArray();
for(int i=0;i<s.length();i+=2*k){
int left=i;
int right=Math.min(left+k-1,s.length()-1);
while(left<right){
char tmp=ch[left];
ch[left]=ch[right];
ch[right]=tmp;
left++;
right--;
}
}
return String.valueOf(ch);
}
}