leetcode刷题第10天

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
	
	```
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值