1. 程式人生 > 其它 >什麼是分散式鎖?為什麼要用分散式鎖?保準看明白!

什麼是分散式鎖?為什麼要用分散式鎖?保準看明白!

題目描述:

給定兩個字串str1和str2,輸出兩個字串的最長公共子串。 題目保證str1和str2的最長公共子串存在且唯一。

示例1

輸入:
"12AB2345CD","123456EF"
返回值:
"2345"

方法一:

class Solution:
    def LCS(self , str1 , str2 ):
        # write code here
        temp1,temp2='',''
        for i in str1:
            temp1+=i
            if temp1 in str2:
                temp2
=temp1 else: temp1=temp1[1:] return temp2

程式碼分析:對於str1中的以每個字元為開頭的字串,判斷是否存在與str2中,最後返回最長的。

方法二:

動態規劃解決

注意這題求的是最長公共子串,不是最長公共子序列,子序列可以是不連續的,但子串一定是連續的。

定義dp[i][j]表示字串str1中以第i個字元和str2種以第j個字元為最後一個元素所構成的最長公共子串,我們首先需要判斷這兩個字元是否相等。

  • 如果不相等,那麼他們就不能構成公共子串,也就是
    dp[i][j]=0;

  • 如果相等,我們還需要計算前面相等字元的個數,其實就是dp[i-1][j-1],所以
    dp[i][j]=dp[i-1][j-1]+1;

程式碼實現:
class Solution:
    def LCS(self , str1 , str2 ):
        # write code here
        l1, l2 = len(str1), len(str2)
        dp = [['' for _ in range(l2 + 1)] for _ in range(l1 + 1)]
        ans = ''
        for i in range(l1):
            
for j in range(l2): if str1[i] == str2[j]: dp[i+1][j+1] = dp[i][j] + str1[i] if len(dp[i+1][j+1]) > len(ans): ans = dp[i+1][j+1] return ans