Skip to main content

lcs_len

Function lcs_len 

Source
pub fn lcs_len(a: &str, b: &str) -> usize
Expand description

LCS — eng uzun umumiy ketma-ketlik uzunligi (Longest Common Subsequence).

“Ketma-ketlik” (subsequence) — belgilarni tartibini buzmasdan, lekin oralaridan tashlab olish mumkin. "olma" va "alma" uchun LCS = "lma".

Holat: dp[i][j] = a[..i] va b[..j] ning LCS uzunligi. O’tish:

a[i-1] == b[j-1]  →  dp[i][j] = dp[i-1][j-1] + 1
aks holda         →  dp[i][j] = max(dp[i-1][j], dp[i][j-1])
  • Time: O(n·m), Space: O(m) — faqat oldingi qatorni saqlaymiz.

Qayerda ishlatiladi: git diff, DNA ketma-ketliklarini solishtirish, fayl solishtiruvchi dasturlar.

§Misol

use rust_algorithms::dp::lcs_len;

assert_eq!(lcs_len("olma", "alma"), 3);
assert_eq!(lcs_len("ABCBDAB", "BDCABA"), 4);
assert_eq!(lcs_len("abc", "xyz"), 0);