📅  最后修改于: 2023-12-03 15:12:42.361000             🧑  作者: Mango
给定一个由小写字母组成的字符串,要求将其中的第 i 到 j 个字符翻转,并返回翻转后的字符串。
例如,对于字符串 "abcdefg",当 i = 2、j = 5 时,翻转结果为 "abedcfg"。
请你完成 reverse 函数,并分析其时间复杂度。
def reverse(s: str, i: int, j: int) -> str:
pass
返回翻转后的字符串。
assert reverse("abcdefg", 2, 5) == "abedcfg"
assert reverse("hello, world!", 2, 9) == "he dlrow,lo!"
将字符串中指定位置的字符进行翻转,需要用到字符串中的切片操作。首先将要翻转的部分切出来,然后将其进行翻转,再将三个部分拼接起来。
字符串切片的时间复杂度为 $O(k)$,其中 $k$ 为切片的长度。因此本算法的时间复杂度为 $O(j-i+1)$。
def reverse(s: str, i: int, j: int) -> str:
return s[:i-1] + s[i-1:j][::-1] + s[j:]
由于字符串在 Python 中是不可被修改的数据结构,因此不能直接对字符串进行翻转操作。需要通过切片操作,将相应的部分切出来,再对其进行翻转,最后再将三段字符串拼接起来。