給定乙個字串s,你可以從中刪除一些字元,使得剩下的串是乙個回文串。如何刪除才能使得回文串最長呢?
輸出需要刪除的字元個數。
輸入描述:
輸入資料有多組,每組包含乙個字串s,且保證:1<=s.length<=1000.
輸出描述:
對於每組資料,輸出乙個整數,代表最少需要刪除的字元個數。
示例1
abcda
22
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 當然我們現在一眼就可以看出來最長公...