当前位置:   article > 正文

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

华为机考入门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]等的某种转换关系

题目来自【牛客】

图片

找出最长对称子串

  1. def findLongestSymmetricSubstring(s):
  2. n = len(s)
  3. # 用于存储状态的二维数组,
  4. # dp[i][j]表示字符串从索引i到j的子串是否为有效的对称密码串
  5. dp = [[0] * n for _ in range(n)]
  6. max_length = 0 # 记录最大长度
  7. # 遍历每个字符
  8. for j in range(n):
  9. dp[j][j] = 1 # 单个字符是对称的
  10. # 从最近j的出发,所以i是从j-1到0
  11. for i in range(j - 1, -1, -1):
  12. # 如果首尾字符相同,且去除首尾字符后的子串是对称的 或者 是相邻字符
  13. if s[i] == s[j] and (dp[i + 1][j - 1] or j - i <= 2):
  14. dp[i][j] = 1
  15. max_length = max(max_length, j - i + 1) # 更新最大长度
  16. return max_length
  17. # 输入
  18. input_str = input()
  19. # 获取最长有效密码串的长度并输出结果
  20. result = findLongestSymmetricSubstring(input_str)
  21. print(result)

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/901632
推荐阅读
相关标签
  

闽ICP备14008679号