给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。
如果剩余少于 k 个字符,则将剩余的所有全部反转;
如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样。
示例:
输入: s = "abcdefg", k = 2
输出: "bacdfeg"
要求:
该字符串只包含小写的英文字母。
给定字符串的长度和 k 在[1, 10000]范围内。
思路:
利用字符串截取函数str[a:b]
注:若b越界,只截取到原串末尾。
1、每趟原串舍弃前2K个字符;
2、截取前K个字符并反转
3、截取K--2K的字符
4、拼接2和3的结果并整体拼接到ans后;
5、当原串为空时结束循环,返回ans。
1 class Solution(object):
2 def reverseStr(self, s, k):
3 """
4 :type s: str
5 :type k: int
6 :rtype: str
7 """
8 lens = len(s)
9 # 若原串长度小于k,则将原串反转返回
10 if lens < k:
11 return s[::-1]
12 # 第二个参数越界则截取到串的最后一个字符,不多取空字符
13 # return s[2*k:8*k]
14 # 返回值
15 ans = ""
16 # 当原串不空时执行循环
17 while not s == "":
18 # 截取前K个
19 temp = s[0:k]
20 print("截取前K个字符:",temp)
21 # 反转
22 temp = temp[::-1]
23 print("反转后:",temp)
24 # 截取后K个
25 flag = s[k:2 * k]
26 print("截取后K个字符:",flag)
27 # 拼接到结果串
28 ans = ans + temp + flag
29 print("拼接后:",ans)
30 # 原串前2K个字符舍弃
31 s = s[2 * k:]
32 return ans
33
34
35 if __name__ == '__main__':
36 solution = Solution()
37 print(solution.reverseStr("abcdefg", 2))
38 print(solution.reverseStr("abcdlaksgdcdefg", 3))