第二十七题
LeetCode第27题要求原地移除数组中所有等于给定值val的元素,并返回移除后数组的新长度。不能使用额外的数组空间,必须在原数组上修改,且元素的顺序可以改变。对于这道题的解法在之前的题目中也使用过,可以使用双指针法(快慢指针),快指针遍历数组,慢指针标记新数组的下一个位置。当快指针指向的元素不等于val时,将该元素复制到慢指针的位置,并移动慢指针。
class Solution:
def removeElement(self, nums: list[int], val: int) -> int:
slow = 0
for fast in range(len(nums)):
if nums[fast] != val:
nums[slow] = nums[fast]
slow += 1
return slow
第二十八题
LeetCode第28题要求实现一个函数,在haystack字符串中找出needle字符串第一次出现的位置。如果needle为空字符串,返回0;如果不存在,返回-1。这与字符串内置的find()方法功能类似。首先处理特殊情况即当needle为空字符串时,题目要求返回0。这与Python的字符串处理逻辑一致,例如"abc".find("")也会返回0。通过遍历haystack的每个可能位置,截取与needle长度相同的子串进行比较。窗口滑动范围是0到len(haystack)-len(needle),确保不会越界。这题如果直接采用字符串的find处理方法也是可以查找到字串在字符串中首次出现的位置。
class Solution:
def strStr(self, haystack: str, needle: str) -> int:
# 特殊情况:needle为空字符串,返回0
if not needle:
return 0
# 遍历 haystack,查找 needle
for i in range(len(haystack) - len(needle) + 1):
if haystack[i:i+len(needle)] == needle:
return i
return -1
2465

被折叠的 条评论
为什么被折叠?



