Substring vs Subsequence
- margin이 있는 2차원 dp를 생성한다 (0으로 초기화)
- 2중 for문을 이용해 한글자씩 비교 후 두 글자가 다르다면 0을 표시
- 두문자가 같다면
dp[i][j] = dp[i-1][j-1] + 1(왼쪽 대각선위) - 2,3 번 반복 후 dp 배열 중 최대값이 lcs 값이다
시간복잡도: O(MN)
- margin이 있는 2차원 dp를 생성한다 (0으로 초기화)
- 2중 for문을 이용해 한글자씩 비교 후 두 글자가 다르면
dp[i][j] = max(dp[i-1][j], dp[i][j-1](왼쪽 위쪽 중의 큰값) - 두문자가 같다면
dp[i][j] = dp[i-1][j-1] + 1(왼쪽 대각선위 + 1) - 2,3 번 반복 후 dp 배열 중 마지막 값이 lcs 값이다
시간복잡도:
O(MN)
- 같은 길이를 가진 부분문자열이 여러개 나올 수 있다
- 행렬 끝의 lcs 값부터 탐색을 시작한다
- 위, 왼쪽 값이 자신과 같으면 위 또는 왼쪽으로 이동한다
- 위, 왼쪽 값이 자신과 다르면 왼쪽 대각선 위로 이동히며 스택에 문자를 넣는다
- 0이 나오면 탐색을 멈추고 스택을 반환한다
- 삽입 역순으로 스택값을 출력한다


