作者: 千石
支持:点赞、收藏、评论
欢迎各位在评论区交流
前言
本文内容来自我平时学习的一些积累,如有错误,还请指正
在题目实战部分,我将代码实现和代码解释设置在了解题思路的下方,方便各位作为参考刷题
一些话
本文内容来自我平时学习的一些积累,如有错误,还请指正
在题目实战部分,我将代码实现和代码解释设置在了解题思路的下方,方便各位作为参考刷题
题目练习步骤:
- 给自己10分钟,读题并思考解题思路
- 有了思路以后开始写代码,如果在上一步骤中没有思路则停止思考并且看该题题解
- 在看懂题解(暂时没看懂也没关系)的思路后,背诵默写题解,直至能熟练写出来
- 隔一段时间,再次尝试写这道题目
刷题
344. 反转字符串 - 力扣(LeetCode)
思路
这道题要求我们原地反转一个字符数组,即不能使用额外的数组空间。我们可以使用双指针的方法,一个指针指向字符数组的开头,另一个指针指向字符数组的末尾,然后交换这两个指针所指向的字符。然后让左指针向右移动一个位置,右指针向左移动一个位置,继续交换。直到两个指针相遇。
代码实现
def reverseString(s):
left, right = 0, len(s) - 1 # 定义左右指针
while left < right: # 左指针小于右指针时循环
s[left], s[right] = s[right], s[left] # 交换左右指针所指的字符
left += 1 # 左指针向右移动一位
right -= 1 # 右指针向左移动一位
541. 反转字符串 II - 力扣(LeetCode)
思路
本题可以使用字符串的切片和反转函数来实现。对于每个 2k 个字符的子串,我们只需要将其前 k 个字符反转,然后再拼接上剩余的字符即可。需要注意的是,如果剩余字符不足 k 个,就将其全部反转,如果剩余字符不足 2k 个但大于等于 k 个,就只反转前 k 个字符,其余字符保持不变。
代码实现
def reverseStr(s: str, k: int) -> str:
n = len(s)
res = ""
for i in range(0, n, 2*k):
# 取前 k 个字符反转
res += s[i:i+k][::-1]
# 取剩余字符不变
res += s[i+k:i+2*k]
return res
剑指 Offer 05. 替换空格 - 力扣(LeetCode)
思路
题目要求将字符串中的空格替换成 "%20",这可以通过遍历字符串,将每个空格替换成 "%20" 来实现。但是,由于字符串是不可变的对象,我们需要构造一个新的字符串来保存结果。
在实现中,我们可以先遍历一遍字符串,计算出字符串中空格的数量,然后创建一个新的字符串,长度为原字符串的长度加上空格数量乘以 2。接着,我们可以使用双指针法,将原字符串中的字符逐一复制到新字符串中,遇到空格则替换成 "%20"。最后,返回新字符串即可。
代码实现
def replaceSpaces(s: str) -> str:
count = 0
for c in s:
if c == ' ':
count += 1
new_len = len(s) + 2 * count
new_s = [''] * new_len
i, j = len(s) - 1, new_len - 1
while i >= 0:
if s[i] == ' ':
new_s[j-2:j+1] = ['%', '2', '0']
j -= 3
else:
new_s[j] = s[i]
j -= 1
i -= 1
return ''.join(new_s)