2017-07-16 46 views
0

的我有兩個字符串最長公共子序列程序拋出一個字符串索引超出範圍錯誤

STR1 =「bqdrcvefgh」

STR2 =「abcvdefgh」

我想找到這兩者之間的LCS但我遇到字符串索引超出範圍exception.This是我的代碼

str1 = "bqdrcvefgh" 
str2 = "abcvdefgh" 
#taking str1 as column and str2 as row 
lis = [[0]*(len(str1)+1) for i in range(len(str2)+1)] 

#The first row and first column has default value of 0 
for i in range(1,len(str2)+1): 
    for j in range(1,len(str1)+1): 
     if str2[i]==str1[j]: 
      lis[i][j] = lis[i-1][j-1]+1 
     else: 
      lis[i][j] = max(lis[i][j-1],lis[i-1][j]) 

#length of the longest LCS 
print(lis[len(str2)][len(str1)]) 

我做錯了什麼?

PS-正確的答案是7個

回答

0

索引是從零至運行LEN-1(它是從1運行至len個包)。

這裏的固定代碼:

def lcs(str1, str2):  
    #taking str1 as column and str2 as row 
    lis = [[0]*(len(str1)) for i in range(len(str2))] 
    for i in range(len(str2)): 
     for j in range(len(str1)): 
      if str2[i]==str1[j]: 
       lis[i][j] = lis[i-1][j-1]+1 
      else: 
       lis[i][j] = max(lis[i][j-1],lis[i-1][j]) 

    #length of the longest LCS 
    print(lis[len(str2)-1][len(str1)-1]) 

str1 = "bqdrcvefgh" 
str2 = "abcvdefgh"  
lcs(str1, str2) # prints 7 
+0

你能解釋一下爲什麼我不應該運行在1環,因爲第一行和第一列具有零默認值? –

+0

@SouvikRay你正在迭代使用相同索引的字符串 – alfasin

+1

哦!我沒有注意到!謝謝指出! –

相關問題