编程&算法总结

写给自己看。。。。。持续更新

一、编程解法总结

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
    # 提取最长公共子串
    longest_substring = str1[end_pos - max_len:end_pos]
    return longest_substring
# 示例输入
str1 = "abcdefg"
str2 = "xyzabcde"
result = longest_common_substring(str1, str2)
print(result)  # 输出:abcde

3、贪心的猴子,按照一定规则去拿香蕉,拿N次,最多能拿到多少?
贪心解法:
如果规则允许猴子每次都选择当前剩余香蕉最多的那个位置,那么我们可以使用贪心算法:
将所有位置的香蕉数量排序。
每次选择香蕉数量最多的位置,直到拿满 N 次。

def max_bananas_greedy(bananas, N):
    # 对香蕉数量进行降序排序
    bananas.sort(reverse=True)
    # 取前 N 个最大的值
    return sum(bananas[:N])
# 示例输入
bananas = [5, 1, 7, 3, 9]  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值