一、290. 单词规律
简单
给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。
这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。
示例1:
输入: pattern = “abba”, s = “dog cat cat dog”
输出: true
示例 2:
输入:pattern = “abba”, s = “dog cat cat fish”
输出: false
示例 3:
输入: pattern = “aaaa”, s = “dog cat cat dog”
输出: false
解题思路
首先对字符串进行分割,之后先判断pattern和分割后的字符串长度是否相同
如果不相同直接False
接着遍历分割后的字符串,看索引值是否相同,不相同就返回False
class S290:
def fun(self, p, s):
ss = s.split(' ')
res = {}
for i in range(len(p)):
if p[i] not in res:
if ss[i] in res.values():
return False
else:
res[p[i]] = ss[i]
else:
if res[p[i]] != ss[i]:
return False
return True
r = S290()
pattern = "aaaa"
s = "dog cat cat dog"
print(r.fun(pattern, s))
二、存在重复元素 II
简单
给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false 。
示例 1:
输入:nums = [1,2,3,1], k = 3
输出:true
示例 2:
输入:nums = [1,0,1,1], k = 1
输出:true
示例 3:
输入:nums = [1,2,3,1,2,3], k = 2
输出:false
def test2(nums, k):
hash = {}
for i in range(len(nums)):
if nums[i] not in hash:
hash[nums[i]] = i
else:
if i - hash[nums[i]] <= k:
return True
else:
hash[nums[i]] = i
return False
nums = [1, 2, 3, 1, 2, 3]
k = 2
print(test2(nums, k))
三、128. 最长连续序列
中等
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
请你设计并实现时间复杂度为 O(n) 的算法解决此问题。
示例 1:
输入:nums = [100,4,200,1,3,2]
输出:4
解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。
示例 2:
输入:nums = [0,3,7,2,5,8,4,6,0,1]
输出:9
思路:
def test3(nums):
res = 0 # 记录最长连续序列的长度
num_set = set(nums) # 记录nums中的所有数值
for num in num_set:
# 如果当前的数是一个连续序列的起点,统计这个连续序列的长度
if (num - 1) not in num_set:
seq_len = 1 # 连续序列的长度,初始为1
while (num + 1) in num_set:
seq_len += 1
num += 1 # 不断查找连续序列,指导num的下一个数不存在数组中
res = max(res, seq_len)
return res
nums=[100,4,200,1,3,2]
print(test3(nums))
a=[i for i in range(2541,2676)]
print(a)