给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例:
输入: s = “abcdefg”, k = 2
输出: “bacdfeg”
class Solution {
public String reverseStr(String s, int k) {
char [] a=s.toCharArray();
for(int st=0;st<a.length;st+=2*k)
{
int i=st;
int j=Math.min(s.length()-1,i+k-1);
while(i<j)
{
char tmp = a[i];
a[i] = a[j];
a[j] = tmp;
i++;
j--;
}
}
return new String(a);
}
}
反转问题我总是想成用:reverse(),而忘记了简单的遍历。
总结: int j=Math.min(s.length()-1,i+k-1);将两种情况融合在一起了,非常巧妙。
while(i<j)
{
char tmp = a[i];
a[i] = a[j];
a[j] = tmp;
i++;
j--;
}
这段交换,不用考虑奇偶性,这样写都满足。
注意写min的时候是Math类在调用。
for(int st=0;st<a.length;st+=2*k)
这里的2k一定要写2k,不然会报错。