给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。
如果剩余字符少于 k 个,则将剩余字符全部反转。 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例:
输入: s = "abcdefg", k = 2
输出: "bacdfeg"
class Solution {
public String reverseStr(String s, int k) {
StringBuilder sb=new StringBuilder();
int ind=0;
for(int i=0;i<s.length();) {
if(ind%2==0) {
StringBuilder temp=new StringBuilder();
if(i+k<=s.length())
temp.append(s.substring(i, i+k));
else
temp.append(s.substring(i, s.length()));
StringBuilder ss=temp.reverse();
//temp.delete( 0, temp.length() );
sb.append(ss);
}else {
if(i+k<=s.length())
sb.append(s.substring(i, i+k));
else
sb.append(s.substring(i, s.length()));
}
i+=k;
ind++;
}
return sb.toString();
}
}
class Solution {
public String reverseStr(String s, int k) {
char[] ch = s.toCharArray();
int n = ch.length;
// 每2k个元素为一组进行反转
for (int i = 0; i < n; i += 2 * k){
int left = i;
int right = (i + k - 1 < n) ? i + k -1 : n - 1; //判断下标是否越界
while (left <= right){
char temp = ch[left];
ch[left] = ch[right];
ch[right] = temp;
left++;
right--;
}
}
String str = new String(ch);
return str;
}
}
来源:https://leetcode-cn.com