首页 > 其他 > 详细

【字符串】leetcode——541反转字符串(模拟)

时间:2021-02-16 18:11:27      阅读:27      评论:0      收藏:0      [点我收藏+]

编号:541. 反转字符串II

给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转

如果剩余字符少于 k 个,则将剩余字符全部反转。

如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

示例:

输入: s = "abcdefg", k = 2
输出: "bacdfeg"

思路

按照题目的要求进行模拟,我们在遍历字符串的时候,令i+=(2*k),每次增加的区间就是2k个字符串,然后再判断是否有需要反转的区间。所以当需要固定规律一段一段去处理字符串的时候,要想想在for循环的表达式上做做文章。

具体代码如下:

func reverseStr(s string, k int) string {

	strs := []byte(s)
	for i := 0; i < len(strs); i += (2 * k) {
		//如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样
		l := i //不能继续用变量i  否则后面的for循环会改变局部变量的值
		r := i + k - 1
		if r >= len(strs) {
			//如果剩余字符少于 k 个,则将剩余字符全部反转。
			r = len(strs) - 1
		}

		for l < r && l < len(strs) {
			strs[l], strs[r] = strs[r], strs[l]
			l++
			r--
		}
	}
	return string(strs)
}

【字符串】leetcode——541反转字符串(模拟)

原文:https://www.cnblogs.com/zmk-c/p/14406983.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!