
g0001_0100.s0098_validate_binary_search_tree.Solution.rs Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-all Show documentation
Show all versions of leetcode-in-all Show documentation
104 LeetCode algorithm problem solutions
The newest version!
// #Medium #String #Dynamic_Programming #2024_09_08_Time_1_ms_(77.46%)_Space_2.2_MB_(26.76%)
impl Solution {
pub fn is_interleave(s1: String, s2: String, s3: String) -> bool {
let mut state = vec![vec![None::; s2.len() + 1]; s1.len() + 1];
is_interleave_0(&s1, &s2, &s3, &mut state)
}
}
fn is_interleave_0(s1: &str, s2: &str, s3: &str, state: &mut Vec>>) -> bool {
if let Some(result) = state[s1.len()][s2.len()] {
return result;
}
if s1.len() + s2.len() != s3.len() {
return false;
}
if s1.is_empty() {
return s2 == s3;
}
if s2.is_empty() {
return s1 == s3;
}
let (head1, tail1) = s1.split_at(1);
let (head2, tail2) = s2.split_at(1);
let (head3, tail3) = s3.split_at(1);
if head1 == head3 && is_interleave_0(tail1, s2, tail3, state) {
state[s1.len()][s2.len()] = Some(true);
return true;
} else if head2 == head3 && is_interleave_0(s1, tail2, tail3, state) {
state[s1.len()][s2.len()] = Some(true);
return true;
} else {
state[s1.len()][s2.len()] = Some(false);
return false;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy