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

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

知识点:

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

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

  3. 动态规划的步骤

a. 定义问题

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

b. 确定状态

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

c. 初始化状态

dp[j][j] = 1

d. 确定状态转移方程

dp[i][j]和dp[i-1][j-1]、dp[i-1][j]、dp[i][j-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 用于记录状态,然后遍历字符串,更新数组中每个位置的状态,最终找到最长的有效密码串的长度并返回。

相关推荐
m0_716430073 分钟前
如何用 classList.toggle 实现侧边栏菜单的点击展开与收起
jvm·数据库·python
Destiny_where8 分钟前
Langgraph基础(4)-中断interrupt.实现图执行的动态暂停与外部交互
人工智能·python·langchain·langgraph
好家伙VCC12 分钟前
# 发散创新:用 Rust实现高性能物理引擎的底层架构设计与实战在游戏开发、虚拟仿真和机器人控
java·开发语言·python·rust·机器人
石榴树下的七彩鱼23 分钟前
图片去水印 API 哪个好?5种方案实测对比(附避坑指南 + 免费在线体验)
图像处理·人工智能·后端·python·api接口·图片去水印·电商自动化
liliangcsdn23 分钟前
多轮对话长上下文-向量检索和混合召回示例
开发语言·数据库·人工智能·python
leoZ23126 分钟前
金仓老旧项目改造-10
开发语言·前端·人工智能·python·金仓
weixin_5806140030 分钟前
PHP源码运行受主板供电影响吗_供电相数重要性说明【技巧】
jvm·数据库·python
2301_8152795233 分钟前
c++怎么获取文件的Inode节点信息_stat结构体深度解析【详解】
jvm·数据库·python
qq_2837200535 分钟前
Python模块精进: urllib 从入门到精通
网络·爬虫·python
weixin_5806140038 分钟前
如何在 Go 中使用 gocql 执行本地 CQL 脚本文件
jvm·数据库·python