97. Interleaving String
Tags:
Medium
Skills:
DP
Type:
Free
June 24, 2025
04:32 AM
No headings found
Loading content...
Related Posts
Leetcode
No headings found
Related Posts
Leetcode
Định nghĩa đơn giản
Ví dụ minh họa
Giả sử:
Các chuỗi sau là interleaving của s1 và s2:
Nhưng "acbdef" không phải là interleaving, vì ký tự 'b' của s1 lại đứng sau 'c', làm sai thứ tự gốc của s1
Problem
Bài toán yêu cầu kiểm tra xem chuỗi s3 có thể được tạo ra bằng cách xen kẽ các ký tự từ hai chuỗi s1 và s2 mà vẫn giữ nguyên thứ tự các ký tự trong từng chuỗi không
Approach
s1 và s2 khác độ dài s3 , chắc chắn không thể interleave được, return false ngaydp[i][j] là true nếu có thể tạo được s3[0...i+j-1] từ s1[0..i-1] và s2[0..j-1].s1 khớp với ký tự tiếp theo của s3 và trạng thái trước đó (dp[i-1][j]) là true thì dp[i][j] = trues2 khớp với ký tự tiếp theo của s3 và trạng thái trước đó (dp[i][j-1]) là true thì dp[i][j] = true.dp = true (hai chuỗi rỗng tạo thành chuỗi rỗng)Solution
1function isInterleave(s1: string, s2: string, s3: string): boolean {
2 const m = s1.length;
3 const n = s2.length;
4 if (m + n !== s3.length) return false;
5 const dp: boolean[][] = Array.from({ length: m + 1 }, () => Array(n + 1).fill(false))
6 dp[0][0] = true;
7 for (let i = 0; i <= m; i++) {
8 for (let j = 0; j <= n; j++) {
9 if (i > 0) dp[i][j] = dp[i][j] || (dp[i - 1][j] && s1[i - 1] === s3[i + j - 1])
10 if (j > 0) dp[i][j] = dp[i][j] || (dp[i][j - 1] && s2[j - 1] === s3[i + j - 1])
11 }
12 }
13 return dp[m][n]
14};dp[i][j] lưu trạng thái: Có thể tạo ra s3[0…i+j-1] bằng cách lấy i ký tự đầu của s1 và j ký tự đầu của s2 hay không
Cụ thể
i là số ký tự đã lấy từ s1 (tức là đang xét đến ký tự s1[i - 1] nếu lấy tiếp)j là số ký tự đã lấy từ s2 (tức là đang xét đến ký tự s2[j - 1] nếu lấy tiếp)dp[i][j] = true nghĩa là: Có thể dùng s1[0..i-1] và s2[0..j-1] để xếp xen kẽ thành s3[0..i+j-1].m x n thì bạn không thể biểu diễn trạng thái khi chưa lấy ký tự nào từ s1 hoặc s2 (tức là i =0 và j = 0)Cụ thể trong thuật toán DP interleaving string:
(i, j) bạn có hai lựa chọn