洛谷P2543 - 奇怪的字符串 - LCS
奇怪的字符串
输入格式
输入文件中包含两个字符串X和Y。当中两字符串非0即1。序列长度均小于9999。
输出格式
X和Y的最长公共子序列长度。
思路:
最长公共子序列:LCS
为了防止内存溢出,可以使用滚动数组
package dp; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; /** * 最长公共子序列:LCS * 注:为了防止内存溢出,可以使用滚动数组 * @author XA-GDD * */ public class P2543_StrangeString { static char [] ch1; static char [] ch2; static int [][] dp; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); String str1 = st.nextToken(); String str2 = st.nextToken(); ch1 =str1.toCharArray(); ch2 =str2.toCharArray(); dp = new int[2][Math.max(ch1.length,ch2.length)+1]; for(int i=1;i<=ch1.length;i++) { for(int j=1;j<=ch2.length;j++) { if(ch1[i-1]==ch2[j-1]) { dp[i%2][j] = dp[(i-1)%2][j-1]+1; }else { dp[i%2][j] = Math.max(dp[(i-1)%2][j], dp[i%2][j-1]); } } } System.out.println(dp[ch1.length%2][ch2.length]); } }