我正在阅读有关Longest Palindrome Subsequence算法的信息并且看到了这个视频: - Video
还看到了这个问题的动态程序代码。 Ajeet Singh
以下是上述链接中的代码: -
public static int getLongestPalindromicSubSequenceSize(String source){
int n = source.length();
int[][] LP = new int[n][n];
//All sub strings with single character will be a plindrome of size 1
for(int i=0; i < n; i++){
LP[i][i] = 1;
}
//Here gap represents gap between i and j.
for(int gap=1;gap<n;gap++){ //-------> 1
for(int i=0;i<n-gap;i++ ){// --------> 2
int j=i+gap; // ---------> 3
if(source.charAt(i)==source.charAt(j) && gap==1)
LP[i][j]=2;
else if(source.charAt(i)==source.charAt(j))
LP[i][j]=LP[i+1][j-1]+2;
else
LP[i][j]= Math.max(LP[i][j-1], LP[i+1][j]);
}
}
return LP[0][n-1];
}
在上面的代码中,我将三行标记为1,2和3。 我无法理解那些循环。 我的疑惑: -
1)在第一个循环中,他将一个名为gap的整数初始化为1。 为什么他把它初始化为1,为什么不将它初始化为0?
2)在第二个for循环i<n-gap
中,为什么他这样做?
3)int j=i+gap
为什么会这样呢?
我是Java的新手,我在理解它们时遇到了问题。请任何人都可以解释这三行代码。
由于
答案 0 :(得分:1)