public class 编码1143_最长公共子序列_解法3 {
private String text1;
private String text2;
private int[] dp;
private int upperLeftValue;
public int longestCommonSubsequence(String text1, String text2) {
this.text1 = text1;
this.text2 = text2;
dp = new int[text2.length() + 1];
Arrays.fill(dp, 0);
for (int i = 1; i <= text1.length(); i++) {
for (int j = 1; j <= text2.length(); j++) {
int temp = dp[j];
if (text1.charAt(i - 1) == text2.charAt(j - 1)) {
dp[j] = upperLeftValue + 1;
} else {
dp[j] = Math.max(dp[j], dp[j - 1]);
}
upperLeftValue = temp;
}
}
return dp[text2.length()];
}
}
public class 编码1143_最长公共子序列_解法3Test {
private 编码1143_最长公共子序列_解法3 underTest;
@Before
public void setUp() throws Exception {
underTest = new 编码1143_最长公共子序列_解法3();
}
@Test
public void testLongestCommonSubsequence_1() {
assertThat(underTest.longestCommonSubsequence("abcde", "ace")).isEqualTo(3);
}
@Test
public void testLongestCommonSubsequence_2() {
assertThat(underTest.longestCommonSubsequence("abc", "abc")).isEqualTo(3);
}
@Test
public void testLongestCommonSubsequence_3() {
assertThat(underTest.longestCommonSubsequence("abc", "def")).isEqualTo(0);
}
@Test
public void testLongestCommonSubsequence_4() {
assertThat(underTest.longestCommonSubsequence("abcba", "abcbcba")).isEqualTo(5);
}
@Test
public void testLongestCommonSubsequence_5() {
assertThat(underTest.longestCommonSubsequence("mhunuzqrkzsnidwbun", "szulspmhwpazoxijwbq")).isEqualTo(6);
}
}