• Palindrome Subarrays


    给定输入字符串,要求判断任意子字符串是否对称。

    基本思路就是DP

    写出DP表达式为 dp[i][j] = dp[i + 1][j - 1] && (s[i] == s[j])    dp[i][j]代表s(i,j)的子串是否对称

    注意在for循环赋值时,这里增长的对象其实是子串的长度。

    长度为奇数时:

    (->代表决定)

    dp[0,0]

    dp[1,1] -> dp[0,2]

    dp[2,2] -> dp[1,3] -> dp[0,4]

    dp[3,3] -> dp[2,4] -> dp[1, 5]

    ...

    长度为偶数时:

    dp[0,1]

    dp[1,2] -> dp[0,3]

    dp[2,3] -> dp[1,4] -> dp[0,5]

    dp[3,4] -> dp[2,5] -> dp[1,6]

    ...

    因此外层循环变量是长度,内层循环变量是起点

     1 def palindrom(s):
     2     length = len(s)
     3     # Create a 2D array in Python
     4     dp = [[False for i in range(length)] for j in range(length)]
     5     # length = 1 substring
     6     for i in range(length):
     7         dp[i][i] = True
     8     # length = 2 substring
     9     for i in range(length - 1):
    10         if s[i] == s[i + 1]:
    11             dp[i][i + 1] = True
    12     # length = k substring
    13     for len3 in range(3, length + 1):
    14         for start in range(0, length - len3 + 1):
    15             end = start + len3 - 1
    16             if s[start] == s[end] and dp[start + 1][end - 1]:
    17                 dp[start][end] = True
    18 
    19     print dp
    20     print dp[0][length - 1]
    21 
    22 palindrom('aaaaabbb')
  • 相关阅读:
    一条软件缺陷(或者叫 Bug)记录都包含了哪些内容?如何提交高质量的软件缺陷(Bug)记录?
    测试人员在软件开发过程中的任务
    HDOJ1754(线段树)
    HDOJ1166(线段树,树状数组)
    分治法
    POJ1840(哈希)
    HOOJ1290 2050(递推)
    POJ1035(字符串)
    HDOJ1800(哈希)
    POJ2299(归并排序)
  • 原文地址:https://www.cnblogs.com/ireneyanglan/p/4932523.html
Copyright © 2020-2023  润新知