leetcode刷题第十天
1.算了我从简单的做起吧,今天的第一题:
这道题要求在原数组上改,因为是排过序的数组,所以这道题还是比较简单的,先定义一个变量key来记录当前比较的不同的字符,若nums[i]与key相等,则将nums[i]删除,若不相等,令key=nums[i],这样一直直到nums遍历完,代码如下:
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
if len(nums)<=1:
return len(nums)
key=nums[0]
for i in nums[1:]:
if i==key:
nums.remove(i)
else:
key=i
return len(nums)
2.第二题
这道题我只是一个代码的搬运工!
我看的题解,使用Sunday算法的那个,代码如下:
class Solution:
def strStr(self, haystack: str, needle: str) -> int:
#func:计算偏移表
def calshiftmat(st):
dic={}
for i in range(len(st)-1,-1,-1):
if not dic.get(st[i]):
dic[st[i]]=len(st)-i
dic["ot"]=len(st)+1
return dic
#其他情况判断
if len(needle)>len(haystack):
return -1
if needle=="":
return 0
#偏移表预处理
dic=calshiftmat(needle)
idx=0
while idx+len(needle)<=len(haystack):
#待匹配字符串
str_cut=haystack[idx:idx+len(needle)]
#判断是否匹配
if str_cut==needle:
return idx
else:
#边界处理
if idx+len(needle)>=len(haystack):
return -1
#不匹配的情况下,根据下一个字符的偏移,移动idx
cur_c=haystack[idx+len(needle)]
if dic.get(cur_c):
idx+=dic[cur_c]
else:
idx+=dic["ot"]
return -1 if idx+len(needle)>=len(haystack) else idx
```