Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,56 @@
|
|||
use std::cmp;
|
||||
|
||||
fn lcs(string1: String, string2: String) -> (usize, String){
|
||||
let total_rows = string1.len() + 1;
|
||||
let total_columns = string2.len() + 1;
|
||||
// rust doesn't allow accessing string by index
|
||||
let string1_chars = string1.as_bytes();
|
||||
let string2_chars = string2.as_bytes();
|
||||
|
||||
let mut table = vec![vec![0; total_columns]; total_rows];
|
||||
|
||||
for row in 1..total_rows{
|
||||
for col in 1..total_columns {
|
||||
if string1_chars[row - 1] == string2_chars[col - 1]{
|
||||
table[row][col] = table[row - 1][col - 1] + 1;
|
||||
} else {
|
||||
table[row][col] = cmp::max(table[row][col-1], table[row-1][col]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let mut common_seq = Vec::new();
|
||||
let mut x = total_rows - 1;
|
||||
let mut y = total_columns - 1;
|
||||
|
||||
while x != 0 && y != 0 {
|
||||
// Check element above is equal
|
||||
if table[x][y] == table[x - 1][y] {
|
||||
x = x - 1;
|
||||
}
|
||||
// check element to the left is equal
|
||||
else if table[x][y] == table[x][y - 1] {
|
||||
y = y - 1;
|
||||
}
|
||||
else {
|
||||
// check the two element at the respective x,y position is same
|
||||
assert_eq!(string1_chars[x-1], string2_chars[y-1]);
|
||||
let char = string1_chars[x - 1];
|
||||
common_seq.push(char);
|
||||
x = x - 1;
|
||||
y = y - 1;
|
||||
}
|
||||
}
|
||||
common_seq.reverse();
|
||||
(table[total_rows - 1][total_columns - 1], String::from_utf8(common_seq).unwrap())
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let res = lcs("abcdaf".to_string(), "acbcf".to_string());
|
||||
assert_eq!((4 as usize, "abcf".to_string()), res);
|
||||
let res = lcs("thisisatest".to_string(), "testing123testing".to_string());
|
||||
assert_eq!((7 as usize, "tsitest".to_string()), res);
|
||||
// LCS for input Sequences “AGGTAB” and “GXTXAYB” is “GTAB” of length 4.
|
||||
let res = lcs("AGGTAB".to_string(), "GXTXAYB".to_string());
|
||||
assert_eq!((4 as usize, "GTAB".to_string()), res);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue