541. 反转字符串 II
给定一个字符串和一个整数 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))