【发布时间】:2014-09-05 13:19:00
【问题描述】:
我正在阅读有关最长回文子序列算法的内容并看到了这个视频:- 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 新手,在理解它们时遇到了问题。请任何人解释这三行代码。
谢谢
【问题讨论】:
标签: java dynamic-programming palindrome