2011-07-12 93 views
1

請快速瀏覽一下我在網上找到的這個函數。如何修改此函數返回字符串而不是int

function longestCommonSubstring(string1, string2){ 
     // init max value 
     var longestCommonSubstring = 0; 
     // init 2D array with 0 
     var table = Array(string1.length); 
     for(a = 0; a <= string1.length; a++){ 
       table[a] = Array(string2.length); 
       for(b = 0; b <= string2.length; b++){ 
         table[a][b] = 0; 
       } 
     } 
     // fill table 
     for(var i = 0; i < string1.length; i++){ 
       for(var j = 0; j < string2.length; j++){ 
         if(string1[i]==string2[j]){ 
           if(table[i][j] == 0){ 
             table[i+1][j+1] = 1; 
           } else { 
             table[i+1][j+1] = table[i][j] + 1; 
           } 
           if(table[i+1][j+1] > longestCommonSubstring){ 
             longestCommonSubstring = table[i+1][j+1]; 
           } 
         } else { 
           table[i+1][j+1] = 0; 
         } 
       } 
     } 
     return longestCommonSubstring; 
} 

它以int形式返回最長公共子串的長度。現在我的問題是,是否有可能修改此函數,以便它返回實際的字符串,而不是僅返回子字符串的長度,我在編程方面頗爲新穎,並且認爲只是修改這個secetion會幫助if(string1[i]==string2[j]){ push(string1[i]},但它並不是那麼容易,因爲我不希望在這兩個字符串中的每個字符都被添加到該數組中,只有那些完全相同的字符纔會被添加。 在此先感謝=)

回答

0

好了最小的變化,你可以聲明一個新變量的現有功能:

var theCommonString = ''; 

然後在函數中添加一行這個現有的一個後:

longestCommonSubstring = table[i+1][j+1]; 

說像:

theCommonString = string1.substr(i + 1 - longestCommonSubstring, 
           longestCommonSubstring); 

(我+ 1個指數可能是一個小的時候,我沒有打擾認真工作吧。)

那麼,在年底只返回你的新變量而不是現有的。

請注意,如果有多個相同長度的公共子字符串,則會返回最後一個。

0

您可以直接存儲在表中,而不是它的長度整個公共子:

function longestCommonSubstring(string1, string2){ 
     // init max value 
     var longestCommonSubstring = ""; 
     // init 2D array with 0 
     var table = Array(string1.length); 
     for(a = 0; a <= string1.length; a++){ 
       table[a] = Array(string2.length); 
       for(b = 0; b <= string2.length; b++){ 
         table[a][b] = 0; 
       } 
     } 
     // fill table 
     for(var i = 0; i < string1.length; i++){ 
       for(var j = 0; j < string2.length; j++){ 
         if(string1[i]==string2[j]){ 
           if(table[i][j] == 0){ 
             table[i+1][j+1] = string1[i]; 
           } else { 
             table[i+1][j+1] = table[i][j] + string1[i]; 
           } 
           if(table[i+1][j+1].length > longestCommonSubstring.length){ 
             longestCommonSubstring = table[i+1][j+1]; 
           } 
         } else { 
           table[i+1][j+1] = 0; 
         } 
       } 
     } 
     return longestCommonSubstring; 
} 
相關問題