看着其他区博客写的,对java是个小白。。。。。。。。。。。
给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的)。
比如两个串为:
abcicba
abdkscab
ab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最长的子序列。
Input
第1行:字符串A 第2行:字符串B (A,B的长度 <= 1000)
Output
输出最长的子序列,如果有多个,随意输出1个。
Sample Input
abcicba abdkscab
Sample Output
abca
package p0208;
import java.util.Scanner;
public class p2 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String a,b;
a=sc.nextLine();
b=sc.nextLine();
sc.close();
int la=a.length();
int lb=b.length();
char[] a1=a.toCharArray();//把字符串转换为子符数组
char[] b1=b.toCharArray();
int[][] dp=new int[la+2][lb+2];
for(int i=1;i<=la;i++)
{
for(int j=1;j<=lb;j++)
{
if(a1[i-1]==b1[j-1])
{
dp[i][j]=dp[i-1][j-1]+1;
}
else
{
dp[i][j]=Math.max(dp[i-1][j],dp[i][j-1]);
}
}
}
StringBuffer s=new StringBuffer();//StringBuffer类可以对字符串进行修改相当于字符串变量而String类相当于字符串常量
int i=la;
int j=lb;
while(dp[i][j]!=0)
{
if(dp[i][j]==dp[i-1][j]) i--;
else if(dp[i][j]==dp[i][j-1])j--;
else
{
s.insert(0, a1[i-1]);
i--;
j--;
}
}
String s1=s.toString();//将StringBuffer类转换为String类
System.out.println(s1);
}
}