编程算法总结
写给自己看。。。。。持续更新
一、编程解法总结
1、判断输入的密码是否正确,比如要求长度大于8,包含至少一个大写,一个小写,一个特殊字符;
import re
def is_password_valid(password):
# 检查密码长度是否大于8
if len(password) <= 8:
return False, "密码长度必须大于8"
# 检查是否包含至少一个大写字母
if not re.search(r'[A-Z]', password):
return False, "密码必须包含至少一个大写字母"
# 检查是否包含至少一个小写字母
if not re.search(r'[a-z]', password):
return False, "密码必须包含至少一个小写字母"
# 检查是否包含至少一个特殊字符(例如:!@#$%^&*()_+等)
if not re.search(r'[!@#$%^&*()_+\-=\[\]{};:"\\|,.<>/?]', password):
return False, "密码必须包含至少一个特殊字符"
# 如果所有条件都满足,返回 True
return True, "密码有效"
# 测试密码
password = input("请输入密码:")
is_valid, message = is_password_valid(password)
if is_valid:
print("密码符合要求!")
else:
print(f"密码不符合要求:{
message}")
2、最长公共子序列(二)
描述
给定两个字符串str1和str2,输出两个字符串的最长公共子序列。如果最长公共子序列为空,则返回"-1"。目前给出的数据,仅仅会存在一个最长的公共子序列
数据范围:0≤∣str1∣,∣str2∣≤20000
要求:空间复杂度 O(n2),时间复杂度 O(n2)
输入:
"1A2C3D4B56","B1D23A456A"
返回值:
"123456"
def longest_common_substring(str1, str2):
# 获取字符串长度
len1, len2 = len(str1), len(str2)
# 初始化 DP 数组和变量
dp = [[0] * (len2 + 1) for _ in range(len1 + 1)]
max_len = 0 # 最长公共子串的长度
end_pos = 0 # 最长公共子串在 str1 中的结束位置
# 填充 DP 数组
for i in range(1, len1 + 1):
for j in range(1, len2 + 1):
if str1[i - 1] == str2[j - 1]:
dp[i][j] = dp[i - 1][j - 1] + 1
if dp[i][j] > max_len:
max_len = dp[i][j]
end_pos = i