1.题目描述
2.知识点
(1)执行步骤如下:
初始化 s = “abcdefg” 和 k = 2
将字符串分割成长度为 2k = 4 的块。
对每个块中的前 k = 2 个字符进行反转。
执行过程
1)第一次循环(i = 0)
start = 0
end = Math.min(0 + 2 - 1, 7 - 1) = 1
反转 chars[0] 和 chars[1],得到 [“b”, “a”, “c”, “d”, “e”, “f”, “g”]
2)第二次循环(i = 4)
start = 4
end = Math.min(4 + 2 - 1, 7 - 1) = 5
反转 chars[4] 和 chars[5],得到 [“b”, “a”, “c”, “d”, “f”, “e”, “g”]
结果
最终,字符数组变为 [“b”, “a”, “c”, “d”, “f”, “e”, “g”],转换为字符串后为 “bacdfeg”。
3.代码实现
class Solution {
public String reverseStr(String s, int k) {
char[] cs=s.toCharArray();//将字符串变成字符数组
for(int i=0;i<s.length()-1;i+=2*k)
{
int start=i;
int end=Math.min(i+k-1,s.length()-1);
while(start<end)
{
char temp=cs[start];
cs[start]=cs[end];
cs[end]=temp;
start++;
end--;//这个作用是让首尾指针相遇或交叉
}
}
return new String(cs);//将字符数组对象变成字符串
}
}
class Solution {
public String reverseStr(String s, int k) {
char[] cs=s.toCharArray();//将字符串变成字符数组
for(int i=0;i<s.length()-1;i+=2*k)//比如字符长7,k=2,第一次遍历i=0,遍历范围0~1(里面索引为0,1的进行反转,这边索引4取不到)
//第二次遍历4~5
//s=7,k取2,2k=4, 4里面取前k=2个进行反转,剩下3个字符 2<=剩下的字符<4, 所以再套娃 再前k个进行反转
{
int start=i;
int end=Math.min(i+k-1,s.length()-1);
while(start<end)
{
char temp=cs[start];//因为temp暂存字符变量 ,所以char类型
cs[start]=cs[end];
cs[end]=temp;
start++;
end--;//这个作用是让首尾指针相遇或交叉
}
}
return new String(cs);//将字符数组对象变成字符串
}
}