题意:从两个字符串中找相同的上升最大子串,输出长度。
思路:dp[i][j],两层循环,表示当时的最大长度。
如果遍历到相等时,if (a[i - 1] == b[j - 1]) dp[i][j] = dp[i - 1][j - 1] + 1;否则取其两边大的一个。
AC java 代码:
import java.util.Scanner;
public class sdupractice0724DPG {
//3276 KB 282 ms
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while (scan.hasNext()) {
String aa = scan.next();
String bb = scan.next();
char[] a = aa.toCharArray();
char[] b = bb.toCharArray();
int a1 = a.length;
int b1 = b.length;
int[][] dp = new int[a1+5][b1+5];
for (int i = 1; i <= a1; i++) {
for (int j = 1; j <= b1; j++) {
if (a[i - 1] == b[j - 1])
dp[i][j] = dp[i - 1][j - 1] + 1;
else {
if (dp[i - 1][j] > dp[i][j - 1])
dp[i][j] = dp[i - 1][j];
else
dp[i][j] = dp[i][j - 1];
}
}
}
System.out.println(dp[a1][b1]);
}
}
}