自学内容网 自学内容网

leetcode_字符串 344.反转字符串

344.反转字符串

  • 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
  • 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

1.双指针

  • 使用双指针方法(left 和 right),分别从列表的两端向中间靠拢,交换对应位置的元素,达到原地修改的目的。具体步骤如下:
    1. 初始化两个指针,一个指针 left 指向字符串的起始位置(0),另一个指针 right 指向字符串的末尾(len(s)-1)
    2. 交换字符,交换 left 和 right 指针位置的字符
    3. 移动指针,将 left 指针向右移动(left += 1),将 right 指针向左移动(right -= 1)
    4. 重复,直到 left 和 right 相遇,整个字符串就被反转
class Solution(object):
    def reverseString(self, s):
        left, right = 0, len(s) - 1
        while left < right:
            # 交换左右两端的元素
            s[left], s[right] = s[right], s[left]
            left += 1
            right -= 1

# 使用示例
solution = Solution()
s = ["a", "b", "c", "d", "e"]  # 输入列表
solution.reverseString(s)  # 调用方法对列表进行修改
print(s)  # 打印修改后的列表
  • 时间复杂度:O(n), n为字符串的长度
  • 空间复杂度:O(1)
  • 即使使用了两个指针 left 和 right,这两个指针只是常数空间的占用,因为它们只是存储了两个整数。因此,两个指针并不占用额外的空间。

2.使用切片的方法来反转

  • 不符合题意,但也可以实现
class Solution(object):
    def reverseString(self, s):
        s[:] = s[::-1]
        return s
solution = Solution()
s = ["h","e","l","l","o"]
print(solution.reverseString(s))
  • 时间复杂度: O(n)
  • 空间复杂度: O(n)

原文地址:https://blog.csdn.net/aKainRe/article/details/145249483

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!