第二十七題
? ? ? ? LeetCode第27題要求原地移除數組中所有等于給定值val
的元素,并返回移除后數組的新長度。不能使用額外的數組空間,必須在原數組上修改,且元素的順序可以改變。對于這道題的解法在之前的題目中也使用過,可以使用雙指針法(快慢指針),快指針遍歷數組,慢指針標記新數組的下一個位置。當快指針指向的元素不等于val
時,將該元素復制到慢指針的位置,并移動慢指針。
class Solution:def removeElement(self, nums: list[int], val: int) -> int:slow = 0for fast in range(len(nums)):if nums[fast] != val:nums[slow] = nums[fast]slow += 1return 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為空字符串,返回0if not needle:return 0# 遍歷 haystack,查找 needlefor i in range(len(haystack) - len(needle) + 1):if haystack[i:i+len(needle)] == needle:return ireturn -1