当前位置:实例文章 » 其他实例» [文章]leetcode第354场周赛补题

leetcode第354场周赛补题

发布人:shili8 发布时间:2024-12-29 16:46 阅读次数:0

**LeetCode 第354 场周赛补题**

### **1.有效的回文**

**难度:** 简单**描述:**

给定一个字符串 `s`,请你找出其中最长的有效回文子串。

回文是指正向(从左到右)和反向(从右到左)读取一致的字符串。

**示例1:**

输入:`"babad"`

输出:`["bab","aba"]`

**示例2:**

输入:`"cbbd"`

输出:`["bb","cb","dd"]`

**代码实现:**

def longestPalindrome(s):
 n = len(s)
 # dp[i][j] 表示 s[i..j] 是否为回文 dp = [[False] * (n +1) for _ in range(n +1)]
 max_len =0 start =0 # 初始化 dp[i][i] = True for i in range(n):
 dp[i][i] = True # 初始化 dp[i][j] = s[i..j] 为回文 for j in range(1, n +1):
 for i in range(j -1, -1, -1):
 if s[i] == s[j]:
 dp[i][j] = (i +1 < j -1 and dp[i +1][j -1]) or (i +1 == j -1)
 else:
 dp[i][j] = False # 找出最长回文子串 for i in range(n):
 for j in range(i, n):
 if dp[i][j]:
 max_len = max(max_len, j - i +1)
 start = i return [s[start:start + max_len]]

### **2. 最大矩形面积**

**难度:** 中等**描述:**

给定一个由正整数组成的数组 `height`,请你找出矩形的最大面积,其中矩形的宽度为 `i`,高度为 `height[i]`。

**示例1:**

输入:`[2,1,5,6,2,3]`

输出:`10`

**示例2:**

输入:`[2,4]`

输出:`4`

**代码实现:**
def maxArea(height):
 n = len(height)
 # dp[i][j] 表示 i..j 之间的最大面积 dp = [[0] * (n +1) for _ in range(n +1)]
 max_area =0 # 初始化 dp[i][i] = height[i]
 for i in range(n):
 dp[i][i] = height[i]
 # 初始化 dp[i][j] = min(height[i], height[j]) * (j - i)
 for j in range(1, n +1):
 for i in range(j -1, -1, -1):
 dp[i][j] = min(height[i], height[j]) * (j - i)
 # 找出最大面积 for i in range(n):
 for j in range(i, n):
 max_area = max(max_area, dp[i][j])
 return max_area

### **3. 最长回文子序列**

**难度:** 中等**描述:**

给定一个由正整数组成的数组 `nums`,请你找出最长回文子序列。

**示例1:**

输入:`[1,2,3,4]`

输出:`1`

**示例2:**

输入:`[1,3,5,7]`

输出:`1`

**代码实现:**
def longestPalindromeSequence(nums):
 n = len(nums)
 # dp[i][j] 表示 i..j 之间的最长回文子序列长度 dp = [[0] * (n +1) for _ in range(n +1)]
 max_len =0 # 初始化 dp[i][i] =1 for i in range(n):
 dp[i][i] =1 # 初始化 dp[i][j] = min(dp[i+1][j], dp[i][j-1]) +1 for j in range(1, n +1):
 for i in range(j -1, -1, -1):
 if nums[i] == nums[j]:
 dp[i][j] = max(dp[i+1][j], dp[i][j-1]) +1 else:
 dp[i][j] = min(dp[i+1][j], dp[i][j-1])
 # 找出最长回文子序列长度 for i in range(n):
 max_len = max(max_len, dp[i][i])
 return max_len

### **4. 最大正方形**

**难度:** 中等**描述:**

给定一个由正整数组成的数组 `nums`,请你找出最大正方形。

**示例1:**

输入:`[2,3,5,7]`

输出:`9`

**示例2:**

输入:`[1,4,6,8]`

输出:`16`

**代码实现:**
def maxSquare(nums):
 n = len(nums)
 # dp[i][j] 表示 i..j 之间的最大正方形面积 dp = [[0] * (n +1) for _ in range(n +1)]
 max_area =0 # 初始化 dp[i][i] = nums[i]
 for i in range(n):
 dp[i][i] = nums[i]
 # 初始化 dp[i][j] = min(dp[i+1][j], dp[i][j-1]) + nums[j]
 for j in range(1, n +1):
 for i in range(j -1, -1, -1):
 if nums[i] == nums[j]:
 dp[i][j] = max(dp[i+1][j], dp[i][j-1]) + nums[j]
 else:
 dp[i][j] = min(dp[i+1][j], dp[i][j-1])
 # 找出最大正方形面积 for i in range(n):
 max_area = max(max_area, dp[i][i])
 return max_area

### **5. 最长回文子序列**

**难度:** 中等**描述:**

给定一个由正整数组成的数组 `nums`,请你找出最长回文子序列。

**示例1:**

输入:`[1,2,3,4]`

输出:`1`

**示例2:**

输入:`[1,3,5,7]`

输出:`1`

**代码实现:**
def longestPalindromeSequence(nums):
 n = len(nums)
 # dp[i][j] 表示 i..j 之间的最长回文子序列长度 dp = [[0] * (n +1) for _ in range(n +1)]
 max_len =0 # 初始化 dp[i][i] =1 for i in range(n):
 dp[i][i] =1 # 初始化 dp[i][j] = min(dp[i+1][j], dp[i][j-1]) +1 for j in range(1, n +1):
 for i in range(j -1, -1, -1):
 if nums[i] == nums[j]:
 dp[i][j] = max(dp[i+1][j], dp[i][j-1]) +1 else:
 dp[i][j] = min(dp[i+1][j], dp[i][j-1])
 # 找出最长回文子序列长度 for i in range(n):
 max_len = max(max_len, dp[i][i])
 return max_len

### **6. 最大正方形**

**难度:** 中等**描述:**

给定一个由正整数组成的数组 `nums`,请你找出最大正方形。

**示例1:**

输入:`[2,3,5,7]`

输出:`9`

**示例2:**

输入:`[1,4,6,8]`

输出:`16`

**代码实现:**
def maxSquare(nums):
 n = len(nums)
 # dp[i][j] 表示 i..j 之间的最大正方形面积 dp = [[0] * (n +1) for _ in range(n +1)]
 max_area =0 # 初始化 dp[i][i] = nums[i]
 for i in range(n):
 dp[i][i] = nums[i]
 # 初始化 dp[i][j]

其他信息

其他资源

Top