61 lines
1.2 KiB
Rust
61 lines
1.2 KiB
Rust
/**
|
|
* [97] Interleaving String
|
|
*/
|
|
pub struct Solution {}
|
|
|
|
// submission codes start here
|
|
|
|
impl Solution {
|
|
pub fn is_interleave(s1: String, s2: String, s3: String) -> bool {
|
|
let (s1, s2, s3): (Vec<char>, Vec<char>, Vec<char>) = (
|
|
s1.chars().collect(),
|
|
s2.chars().collect(),
|
|
s3.chars().collect(),
|
|
);
|
|
let (n, m, t) = (s1.len(), s2.len(), s3.len());
|
|
|
|
if n + m != t {
|
|
return false;
|
|
}
|
|
|
|
let mut dp = vec![false; m + 1];
|
|
dp[0] = true;
|
|
|
|
for i in 0..=n {
|
|
for j in 0..=m {
|
|
if i == 0 && j == 0 {
|
|
continue;
|
|
}
|
|
|
|
let p = i + j - 1;
|
|
|
|
if i != 0 {
|
|
dp[j] &= s1[i - 1] == s3[p];
|
|
}
|
|
|
|
if j != 0 {
|
|
dp[j] |= dp[j - 1] && s2[j - 1] == s3[p];
|
|
}
|
|
}
|
|
}
|
|
|
|
dp[m]
|
|
}
|
|
}
|
|
|
|
// submission codes end
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn test_97() {
|
|
assert!(Solution::is_interleave(
|
|
"aabcc".to_owned(),
|
|
"dbbca".to_owned(),
|
|
"aadbbcbcac".to_owned()
|
|
));
|
|
}
|
|
}
|