给定一个字符串s和一个整数k,从字符串开头算起,每计数至2k个字符,就反转这2k个字符中的前k个字符。
1.如果剩余字符少于k个,则将剩余字符全部反转。
2.如果剩余字符小于2k个但多于k个,则反转前k个字符,其余字符保持原样。
示例 1:
输入:s = "abcdefg", k = 2
输出:"bacdfeg"
示例 2:
输入:s = "abcd", k = 2
输出:"bacd"
思路:模拟法
我们直接按题意进行模拟:反转每个下标从2k的倍数开始的,长度为k的子串。若该子串长度不足k,则反转整个子串。
void swap (char *a,char*b)
{
char tmp=*a;
*a=*b;
*b=tmp;
}
void reverse (char*l,char*r)
{
while (l
swap(l++,--r);
}
}
int min (int c,int d)
{
return c
char * reverseStr(char * s, int k){
int len=strlen (s);
for (int i=0;i
reverse(&s[i],&s[min(i+k,len)]);
}
return s;
}