反转字符串2:
题意:
给定一个字符串 s 和一个整数 k,从字符串开头算起, 每计数至 2k 个字符,就反转这 2k 个字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例:
输入: s = "abcdefg", k = 2
输出: "bacdfeg"
思路:最妙的地方在于我们可以把正常翻转和小于2k 大于k的情况并为一类,因为都是翻转k个字符。另外一个很妙的点是,i以2k递增,把每2k个元素看成一组。
代码:
替换空格:
题意就是将空格变成%20,;
思路:
每一个空格变成%20,空间就扩大2格,所以我们一开始可以求出我们需要扩大的空间。
然后在替换操作的时候有两种方式,从前往后替换 从后往前替换两种方法。
从前往后,每次替换元素,后面的都需要向后移动,时间复杂度是o(n2).
从后向前,用的方法是双指针法,可以不用每次操作都移动所有元素,时间复杂度是O(N).
右指针指向扩充完数组的最后一位,左指针指向未扩充之前数组的最后一位,遇到的是字符时,将左指针指向的值赋给右指针,遇到空格时,右指针当前元素为0 前一个为2 再前一个为%,然后右指针移动两位,然后每次循环结束,左右指针都向前移动一位。
代码: