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
}
}