😎풀이

  1. nums1i번째 부터 교집합을 찾는것과 nums2j번째 부터 교집합을 찾는 경우의 수를 DP로 탐색
  2. 두 문자가 같을 경우 이전 경우의 수에 1을 누적
  3. 가능한 가장 긴 부분 문자열의 길이 반환
function findLength(nums1: number[], nums2: number[]): number {
    let maxLen = 0
    const n = nums1.length
    const m = nums2.length
    const dp = Array.from({ length: n + 1 }, () => Array(m + 1).fill(0))
    for(let i = n - 1; i >= 0; i--) {
        for(let j = m - 1; j >= 0; j--) {
            if(nums1[i] !== nums2[j]) continue
            dp[i][j] = dp[i + 1][j + 1] + 1
            maxLen = Math.max(maxLen, dp[i][j])
        }
    }
    return maxLen
};
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글