2024.04.30_学习日记
天气:中雨
学习地点:宿舍
学习时长:10h
学习内容
- 算法题
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20from collections import defaultdict # 导入defaultdict模块
while True:
try:
n = int(input()) # 接收输入,表示接下来有几组测试数据
for i in range(n): # 对每组测试数据进行处理
strs = input() # 接收输入的字符串
hashmap = defaultdict(int) # 创建一个默认值为0的字典
cnt = 0 # 记录字符串中重复字符的数量
for c in strs: # 遍历字符串中的每个字符
if hashmap[c] == 1: # 如果当前字符已经出现过一次
cnt += 1 # 则重复字符数量加1
hashmap[c] = 0 # 并将该字符的计数归零,表示不再重复
else:
hashmap[c] += 1 # 否则,将该字符的计数加1
if len(strs) - cnt <= 26: # 如果去除重复字符后的长度不超过26
print(cnt) # 则输出重复字符数量
else:
print(len(strs) - 26) # 否则,输出超过26个字符的部分
except: # 捕获所有异常
break # 如果出现异常,则结束循环 - 动态规划
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16while True:
try:
n = int(input()) # 接收输入,表示接下来有几组测试数据
for i in range(n): # 对每组测试数据进行处理
nums = list(map(int, input().strip()[1:-1].split(','))) # 输入一个列表,去除首尾的方括号,然后按逗号分割成数字列表
dp = [1]*(len(nums)+1) # 初始化动态规划数组,长度比nums多1,初始值都为1
# dp[i]表示前i个数的最长递增子序列的长度
res = 1 # 初始化结果为1
for i in range(1, len(nums)): # 遍历nums中的每个数字,从第2个数字开始
for j in range(i): # 遍历nums中当前数字之前的每个数字
if nums[i] > nums[j]: # 如果当前数字大于前面的数字
dp[i] = max(dp[i], dp[j]+1) # 更新dp[i],取当前dp[i]和dp[j]+1的较大值
res = max(res, dp[i]) # 更新结果为当前res和dp[i]的较大值
print(res) # 输出结果
except: # 捕获所有异常
break # 如果出现异常,则结束循环