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
二、思路分析:
这题实际上是判断当前索引+k <= len即可,然后如果剩余字符足够k个,则对k个字符进行翻转;
不足k个,则翻转所有剩余字符;
然后索引+= 2k即可
三、AC 代码:
char * reverseStr(char * s, int k){
int len = strlen(s);
int i, j, l;
for (i = 0; i < len; ) {
if (i + k <= len) { // 前k个进行反转
for (j = i, l = i + k - 1; j < l; j++, l--) {
char tmp = s[j];
s[j] = s[l];
s[l] = tmp;
}
} else { // 剩余字符进行反转
for (j = i, l = len - 1; j < l; j++, l--) {
char tmp = s[j];
s[j] = s[l];
s[l] = tmp;
}
}
i += 2 * k;
}
return s;
}
四、总结:
这题题目有点难懂,需要好好审题。
范文参考:
[南瓜写题解]leetcode 541. 反转字符串 II - 反转字符串 II - 力扣(LeetCode) (leetcode-cn.com)