文档链接:代码随想录
题目链接:344.反转字符串
视频讲解:视频讲解
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s
的形式给出。
不要给另外的数组分配额外的空间,你必须**原地修改输入数组**、使用 O(1) 的额外空间解决这一问题。
示例 1:
输入:s = ["h","e","l","l","o"]
输出:["o","l","l","e","h"]
示例 2:
输入:s = ["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]
提示:
1 <= s.length <= 105
s[i]
都是 ASCII 码表中的可打印字符思路:初始化两个指针,一个在最左边为0,另一个在最右面最后一个索引,两个指针同时向中间移动,并且交换元素,原地修改字符串。
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
left = 0 # 初始化左指针,指向字符串的开始
right = len(s) - 1 # 初始化右指针,指向字符串的末尾
while left < right: # 当左指针小于右指针时,执行循环
# 交换左指针和右指针所指向的字符
s[left], s[right] = s[right], s[left]
left += 1 # 左指针向右移动
right -= 1 # 右指针向左移动
文档链接:代码随想录
题目链接:541.反转字符串II
视频讲解:视频讲解
给定一个字符串 s
和一个整数 k
,从字符串开头算起,每计数至 2k
个字符,就反转这 2k
字符中的前 k
个字符。
k
个,则将剩余字符全部反转。2k
但大于或等于 k
个,则反转前 k
个字符,其余字符保持原样。示例 1:
输入:s = "abcdefg", k = 2
输出:"bacdfeg"
示例 2:
输入:s = "abcd", k = 2
输出:"bacd"
提示:
1 <= s.length <= 104
s
仅由小写英文组成1 <= k <= 104
思路:使用双指针法来处理字符串中的每个2k长度的子串,并在每个子串中反转前k个字符。函数通过循环来处理所有子串,直到所有字符都被处理完毕。最后,函数返回反转后的字符串。
class Solution:
def reverseStr(self, s: str, k: int) -> str:
# 计算需要反转的起始位置和长度
start = 0
length = len(s)
while start < length:
# 反转前k个字符
# 将字符串s中从位置start开始的连续2k个字符中的前k个字符进行反转
# 然后将反转后的结果与剩余的字符重新组合成一个新的字符串
s = s[:start] + s[start:start + k][::-1] + s[start + k:]
# 更新起始位置
start += 2 * k
return s
s = s[:start]
:这一部分从原始字符串s
中获取从开始到start
位置(不包括start
位置)的所有字符。也就是说,它会获取字符串的前start
个字符。s[start:start+k][::-1]
:这一部分稍微复杂一些。首先,它从原始字符串s
中获取从start
到start+k-1
位置的子串。然后,它对这个子串进行反转操作。在Python中,[::-1]
是一个常用的字符串反转技巧。s[start+k:]
:这一部分从原始字符串s
中获取从start+k
位置到最后(包括结束位置)的所有字符。也就是说,它会获取从字符串的start+k
位置之后的所有字符。文档链接:代码随想录
题目链接:151.翻转字符串里的单词
视频讲解:视频讲解
给你一个字符串 s
,请你反转字符串中 单词 的顺序。
单词 是由非空格字符组成的字符串。s
中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
注意: 输入字符串 s
中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。
示例 1:
输入:s = "the sky is blue"
输出:"blue is sky the"
示例 2:
输入:s = " hello world "
输出:"world hello"
解释:反转后的字符串中不能存在前导空格和尾随空格。
示例 3:
输入:s = "a good example"
输出:"example good a"
解释:如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。
提示:
1 <= s.length <= 104
s
包含英文大小写字母、数字和空格 ' '
s
中 至少存在一个 单词进阶: 如果字符串在你使用的编程语言中是一种可变数据类型,请尝试使用 O(1)
额外空间复杂度的 原地 解法。
class Solution:
def reverseWords(self, s: str) -> str:
# 将字符串拆分为单词,即转换成列表类型
words = s.split()
# 反转单词
left, right = 0, len(words) - 1
while left < right:
words[left], words[right] = words[right], words[left]
left += 1
right -= 1
# 将列表转换成字符串
return " ".join(words)