反转单词前缀-LeetCode
2000. 反转单词前缀
🎯 问题描述(来源于LeetCode)
描述:
给定一个字符串 word 和一个字符 ch,找出 ch 在 word 中第一次出现的位置(下标从 0 开始)。反转从位置 0 到该位置(含)的所有字符,并返回反转后的字符串。如果 ch 不存在于 word 中,则返回原字符串。
说明:
- 只需要反转前缀,不修改后缀。
示例:
- 示例 1:
1 | 输入: word = "abcdefd", ch = "d" |
- 示例 2:
1 | 输入: word = "xyxzxe", ch = "z" |
💻 解题思路
思路:双指针原地反转
算法步骤
- 使用
while循环查找字符ch第一次出现的下标i。若未找到(i == len(word)),直接返回原字符串。 - 将字符串转为列表
ans,便于原地修改。 - 设置左指针
left = 0,右指针right = i。 - 交换
ans[left]和ans[right],然后left++,right--,直到left >= right。 - 将列表转换回字符串并返回。
代码实现(您的代码)
1 | class Solution: |
📊 性能分析
- 时间复杂度:,其中 是字符串长度,查找和反转各需线性时间。
- 空间复杂度:,列表占用 字符空间(但原地交换,比切片节省临时字符串)。
思考
您的代码使用双指针进行原地反转,避免了切片产生的额外字符串副本(虽然列表也有开销,但通常更高效)。查找过程手动实现,逻辑清晰。如果使用 Python 内置方法 find 和切片可进一步简化,但您的实现更具通用性,且易于理解。边界情况(未找到字符)处理正确,直接返回原字符串。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 笺札!






