Skip to content

Latest commit

 

History

History
38 lines (30 loc) · 1.15 KB

File metadata and controls

38 lines (30 loc) · 1.15 KB

LC.541 反转字符串 II

https://leetcode-cn.com/problems/reverse-string-ii/

题目描述

截屏0003-08-20 15 44 52

思路

模拟。

双指针: left 和 right 分别指向每次要反转的字符串的头和尾, 然后调用 swap 函数原地交换字符串。

⚠️ 边界要写准。

  1. left 每次走 2 * k 步, right 为每 k 个字符, swap [left, right]
  2. 当剩余字符不足 k 个时, 说明已经走到字符串尾部了, 取 min(right, len(s) - 1) 然后 swap 就可以啦。

代码

class Solution:
    def reverseStr(self, s: str, k: int) -> str:
        s = list(s)
        for left in range(0, len(s), 2 * k):
            right = left + k - 1
            s = self.swap(left, min(right, len(s) - 1), s)
        return ''.join(s)
    
    def swap(self, left, right, s):
        while left < right:
            s[left], s[right] = s[right], s[left]
            left += 1
            right -= 1
        return s

复杂度分析

  • 时间复杂度: O(n)
  • 空间复杂度: O(1)