1.# 编写一个函数来查找字符串数组中的最长公共前缀。
# 如果不存在公共前缀,返回空字符串
# ""。
#
# 示例
# 1:
# 输入:strs = ["flower", "flow", "flight"]
# 输出:"fl"
# 示例
# 2:
# 输入:strs = ["dog", "racecar", "car"]
# 输出:""
# 解释:输入不存在公共前缀。
def longest_common_prefix(strs):
if not strs:
return ""
prefix = strs[0]
for s in strs[1:]:
while s and not s.startswith(prefix):
prefix = prefix[:-1]
if not prefix:
return ""
if not prefix:
return ""
return prefix
2.# 给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false 。
#
# 示例 1:
# 输入:nums = [1,2,3,1,2,3], k = 2
# 输出:false
#
# 示例 2:
# 输入:nums = [1,0,1,1], k = 1
# 输出:true
def contains_pair_within_k(nums, k):
seen = set() # 用来存储最近 k 个索引处的元素值
for i, num in enumerate(nums):
if num in seen:
# 如果当前元素已经在集合中出现过,检查索引差是否满足条件
if abs(i - list(seen).index(num)) <= k:
return True
# 将当前元素及其索引添加到集合中
seen.add(num)
# 如果集合大小超过 k,则移除最旧的元素(即索引最小的元素)
if len(seen) > k:
seen.remove(nums[i - k])
return False
3.# 给定一个只包括 '(',')','<','>','{','}','[',']' 的字符串 s ,判断字符串是否有效。
#
# 有效字符串需满足:
# 1、左括号必须用相同类型的右括号闭合。
# 2、左括号必须能顺序地正确闭合。
# 3、每个右括号都有一个对应的相同类型的左括号。
#
# 示例 1:
# 输入:s = "([)]"
# 输出:false
#
# 示例 2:
# 输入:s = "[<>({})]"
# 输出:true
def isValid(s: str) -> bool:
stack = []
opening_brackets = set('([{<')
closing_brackets = set(')]}>')
bracket_map = {')': '(', ']': '[', '}': '{', '>': '<'}
for char in s:
if char in opening_brackets:
stack.append(char)
elif char in closing_brackets:
if not stack or bracket_map[char] != stack.pop():
return False
return len(stack) == 0