leetcode - maximum length of repeated subarray(kotlin)

silver·2021년 7월 8일
0

level - medium

[문제 내용]
2개의 배열에서 공통된 가장 긴 subarray를 찾아 길이 반환

[example 1]

Input: nums1 = [1,2,3,2,1], nums2 = [3,2,1,4,7]
Output: 3
Explanation: The repeated subarray with maximum length is [3,2,1].

[example 2]

Input: nums1 = [0,0,0,0,0], nums2 = [0,0,0,0,0]
Output: 5

[해결 방법]
재귀를 이용해서 해당문제를 해결했다.
배열 nums1과 nums2에서 같은 것을 발견하면
재귀를 이용해 다음 배열도 같은지 확인한후,
같으면 1을 더하고 다시 다음배열도 같은지 확인하며
아니면 0을 반환한다.

class Solution {
    fun findLength(nums1: IntArray, nums2: IntArray): Int {
        var max = 0
        for(i in nums1.indices) {
            for(j in nums2.indices) {
                if(nums1[i] == nums2[j]) {
                    // subarray를 찾아 길이를 반환하고 해당값이 더 클수록 max에 저장
                    max = max.coerceAtLeast(findSubArray(nums1, nums2, i, j))
                    // max가 최대길이가 되었을 경우 break
                    if(max == nums1.size || max == nums2.size) {
                        break;
                    }
                }
            }
            // max가 최대길이가 되었을 경우 break
            if(max == nums1.size || max == nums2.size) {
                break;
            }
        }

        return max
    }

    fun findSubArray(nums1: IntArray, nums2: IntArray, index1: Int, index2:Int): Int {
        if(index1 >= nums1.size || index2 >= nums2.size) {
            return 0
        }

        // num1과 num2가 같을 경우 1을 더해준다.
        if(nums1[index1] == nums2[index2]) {
            return 1 + findSubArray(nums1, nums2, index1+1, index2+1)
        }

        return 0
    }
}

0개의 댓글