侧边栏壁纸
博主头像
colo

欲买桂花同载酒

  • 累计撰写 1825 篇文章
  • 累计收到 0 条评论

反转字符串

2025-12-12 / 0 评论 / 14 阅读

题目

反转字符串

信息

  • 类型:问答
  • 难度:⭐

考点

数组遍历,双指针技巧,字符串操作

快速回答

使用双指针技巧原地反转字符串:

  • 初始化左指针 left = 0,右指针 right = len(s)-1
  • left < right 时循环:
    • 交换 s[left]s[right]
    • 左指针右移:left++
    • 右指针左移:right--
  • 时间复杂度 O(n),空间复杂度 O(1)
## 解析

原理说明

反转字符串的核心是交换首尾对应位置的字符:

  • 双指针技巧:使用两个指针分别从数组头部和尾部向中间移动,每次交换指针位置的元素
  • 原地修改:直接在原数组上操作,不创建新数组,节省空间
  • 终止条件:当左指针超过或等于右指针时停止,确保每个元素只交换一次

代码示例

def reverse_string(s: list) -> None:
    left, right = 0, len(s) - 1
    while left < right:
        s[left], s[right] = s[right], s[left]  # 交换字符
        left += 1
        right -= 1

# 示例用法
chars = ['h','e','l','l','o']
reverse_string(chars)
print(chars)  # 输出 ['o','l','l','e','h']

最佳实践

  • 边界处理:自动兼容空数组和单元素数组(无需特殊处理)
  • 语言适配
    • Python:字符串不可变,需先转为 list 再转回字符串
    • Java/C++:可直接操作字符数组 char[]
  • 循环优化:使用 while left < rightfor 循环更直观

常见错误

  • 忽略字符串不可变性:在 Python/Java 中直接操作字符串会报错,需先转为可变结构
  • 指针移动错误
    • 忘记移动指针导致死循环
    • 错误使用 left <= right 导致中间元素被交换两次
  • 创建新数组:使用 s[::-1] 等语法不符合原地修改的要求

扩展知识

  • 字符串不可变性:Python/Java 中字符串不可修改,反转需转为字符数组
  • 相关算法
    • 反转单词顺序(先整体反转再逐单词反转)
    • 旋转数组(三次反转法)
  • 双指针应用场景:两数之和、移除元素、回文校验等