騰訊筆試 構造回文(使用最長公共子串行) 動態規劃

2021-10-23 16:24:17 字數 959 閱讀 3138

給定乙個字串s,你可以從中刪除一些字元,使得剩下的串是乙個回文串。如何刪除才能使得回文串最長呢?

輸出需要刪除的字元個數。

輸入描述:

輸入資料有多組,每組包含乙個字串s,且保證:1<=s.length<=1000.

輸出描述:

對於每組資料,輸出乙個整數,代表最少需要刪除的字元個數。

示例1

abcda

google

2

2

import sys

class solution:

def max_length(self, s1, s2):

dp = [[0] * (len(s2) + 1) for i in range(len(s1) + 1)]

for i in range(1, len(s1) + 1):

for j in range(1, len(s2) + 1):

if s1[i - 1] == s2[j - 1]:

dp[i][j] = dp[i - 1][j - 1] + 1

else:

dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])

return dp[len(s1)][len(s2)]

def max_delete(self, s):

return len(s) - self.max_length(s, s[::-1])

if __name__ == "__main__":

test = solution()

a = sys.stdin.readline().strip()

while a:

print(test.max_delete(a))

a = sys.stdin.readline().strip()

最長回文子串行 最長公共子串行 最長連續回文子串

public class solution int result new int len 1 len 1 stringbuffer sb new stringbuffer s sb sb.reverse string rev sb.tostring result 0 0 0 下面兩個for迴圈相當於...

最長公共子串行 最長公共子串

1 最長公共子串行 採用動態規劃的思想,用乙個陣列dp i j 記錄a字串中i 1位置到b字串中j 1位置的最長公共子串行,若a i 1 b j 1 那麼dp i j dp i 1 j 1 1,若不相同,那麼dp i j 就是dp i 1 j 和dp i j 1 中的較大者。class lcs el...

最長公共子串行 最長公共子串

1.區別 找兩個字串的最長公共子串,這個子串要求在原字串中是連續的。而最長公共子串行則並不要求連續。2 最長公共子串 其實這是乙個序貫決策問題,可以用動態規劃來求解。我們採用乙個二維矩陣來記錄中間的結果。這個二維矩陣怎麼構造呢?直接舉個例子吧 bab 和 caba 當然我們現在一眼就可以看出來最長公...