华为机考入门python3--(32)牛客32-密码截取

分类:最长对称子串、动态规划

知识点:

  1. 生成二维数组 dp = \[0 * n for _ in range(n)]

  2. 求最大值 max(value1, value2)

  3. 动态规划的步骤

a. 定义问题

长度为n下最长的对称子串的长度

b. 确定状态

dpij表示字符串从索引i到j的子串是否为对称子串。

c. 初始化状态

dpjj = 1

d. 确定状态转移方程

dpij和dpi-1j-1、dpi-1j、dpij-1等的某种转换关系

题目来自【牛客】

找出最长对称子串

python 复制代码
def findLongestSymmetricSubstring(s):
    n = len(s)
    # 用于存储状态的二维数组,
    # dp[i][j]表示字符串从索引i到j的子串是否为有效的对称密码串
    dp = [[0] * n for _ in range(n)]
    max_length = 0  # 记录最大长度

    # 遍历每个字符
    for j in range(n):
        dp[j][j] = 1  # 单个字符是对称的
        # 从最近j的出发,所以i是从j-1到0
        for i in range(j - 1, -1, -1):
            # 如果首尾字符相同,且去除首尾字符后的子串是对称的 或者 是相邻字符
            if s[i] == s[j] and (dp[i + 1][j - 1] or j - i <= 2):
                dp[i][j] = 1
                max_length = max(max_length, j - i + 1)  # 更新最大长度

    return max_length

# 输入
input_str = input()

# 获取最长有效密码串的长度并输出结果
result = findLongestSymmetricSubstring(input_str)
print(result)

findLongestSymmetricSubstring 函数使用动态规划来找到字符串中的最长有效对称密码串。基本思路是初始化一个二维数组 dp 用于记录状态,然后遍历字符串,更新数组中每个位置的状态,最终找到最长的有效密码串的长度并返回。

相关推荐
林泽毅5 分钟前
Qwen3.5 DPO 模型对齐实战(pytrio训练版)
人工智能·python·算法
荣码11 分钟前
LangGraph多步工作流:Agent不够用的时候,我踩了4个坑
java·python
曲幽19 分钟前
从卡顿到丝滑:FastAPI 调用外部 API 的正确姿势(httpx 实战)
python·fastapi·web·async·httpx·client·await·requests·aiohttp
不瘦80斤不改名36 分钟前
HalfCart:基于LBS的1\.5km本地拼单系统全栈实践与踩坑复盘
python·docker·typescript·pycharm
深盾科技_Virbox1 小时前
软件交付保护如何从加壳走向代码虚拟化
java·python·安全
YUS云生2 小时前
Python学习笔记·第28天:Git入门——版本控制与基础操作
笔记·python·学习
Bryce学亮2 小时前
1688 半自动化拟人浏览信息处理工具爬虫
爬虫·python
是枚小菜鸡儿吖2 小时前
服务器出问题别等用户反馈:用Python和钉钉搭一套轻量告警系统
服务器·python·钉钉
聪明的一休丶11 小时前
VLLM v0.24.0 版本深度解析:新引擎、新架构与大规模服务全家桶升级
python·架构·vllm
万亿少女的梦16813 小时前
基于Python的高考志愿填报辅助系统设计与实现
java·spring boot·python·mysql·vue