Skip to content

1143.最长公共子序列

题解

js
/**
 * @param {string} text1
 * @param {string} text2
 * @return {number}
 */
var longestCommonSubsequence = function (text1, text2) {
  let dp = Array.from(Array(text1.length + 1), () =>
    Array(text2.length + 1).fill(0)
  );
  for (let i = 1; i <= text1.length; i++) {
    for (let j = 1; j <= text2.length; j++) {
      // 如果两个相等,代表找到公共字符
      if (text1[i - 1] === text2[j - 1]) {
        // 最长数量 + 1
        dp[i][j] = dp[i - 1][j - 1] + 1;
      } else {
        // text1和text2当前公共子序列是由前面推出
        dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
      }
    }
  }
  return dp[text1.length][text2.length];
};
/**
 * @param {string} text1
 * @param {string} text2
 * @return {number}
 */
var longestCommonSubsequence = function (text1, text2) {
  let dp = Array.from(Array(text1.length + 1), () =>
    Array(text2.length + 1).fill(0)
  );
  for (let i = 1; i <= text1.length; i++) {
    for (let j = 1; j <= text2.length; j++) {
      // 如果两个相等,代表找到公共字符
      if (text1[i - 1] === text2[j - 1]) {
        // 最长数量 + 1
        dp[i][j] = dp[i - 1][j - 1] + 1;
      } else {
        // text1和text2当前公共子序列是由前面推出
        dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
      }
    }
  }
  return dp[text1.length][text2.length];
};