Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述:
541. 反转字符串 II - 力扣(LeetCode) (leetcode-cn.com)
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例 1:
输入:s = "abcdefg", k = 2
输出:"bacdfeg"
示例 2:
输入:s = "abcd", k = 2
输出:"bacd"
提示:
- 1 <= s.length <= 10^4
- s 仅由小写英文组成
- 1 <= k <= 10^4
二、思路分析:
双指针,start指向要翻转的字符串的开头,end指向结尾,然后只要判断剩余字符的个数即可 若剩余字符数少于k个,即len - start - 1 < k,则end设为len - 1,调用函数翻转 其他情况,end直接设为start+k-1,然后调用函数即可 更新start = start + 2*k;
三、AC 代码:
void reverse(char *s, int start, int end)
{
int i = start,j = end;
char temp;
while(i < j)
{
temp = s[i];
s[i] = s[j];
s[j] = temp;
i++;
j--;
}
}
char * reverseStr(char * s, int k){
int len = strlen(s),start = 0,end;
while(start < len)
{
if(len - start - 1 < k) end = len - 1;
else end = start + k - 1;
reverse(s,start,end);
start = start + 2*k;
}
return s;
}
四、总结:
双指针,直接模拟即可。