diff --git a/solution/0000-0099/0076.Minimum Window Substring/README.md b/solution/0000-0099/0076.Minimum Window Substring/README.md index 6de04aa8d4038..8057dad2774ae 100644 --- a/solution/0000-0099/0076.Minimum Window Substring/README.md +++ b/solution/0000-0099/0076.Minimum Window Substring/README.md @@ -268,6 +268,44 @@ public class Solution { } ``` +### **Rust** + +```rust +impl Solution { + pub fn min_window(s: String, t: String) -> String { + let (mut need, mut window, mut cnt) = ([0; 256], [0; 256], 0); + for c in t.chars() { + need[c as usize] += 1; + } + let (mut j, mut k, mut mi) = (0, -1, 1 << 31); + for (i, c) in s.chars().enumerate() { + window[c as usize] += 1; + if need[c as usize] >= window[c as usize] { + cnt += 1; + } + + while cnt == t.len() { + if i - j + 1 < mi { + k = j as i32; + mi = i - j + 1; + } + let l = s.chars().nth(j).unwrap() as usize; + if need[l] >= window[l] { + cnt -= 1; + } + window[l] -= 1; + j += 1; + } + } + if k < 0 { + return "".to_string(); + } + let k = k as usize; + s[k..k + mi].to_string() + } +} +``` + ### **...** ``` diff --git a/solution/0000-0099/0076.Minimum Window Substring/README_EN.md b/solution/0000-0099/0076.Minimum Window Substring/README_EN.md index 2ef9df66ac0b8..2aadaf38a3e16 100644 --- a/solution/0000-0099/0076.Minimum Window Substring/README_EN.md +++ b/solution/0000-0099/0076.Minimum Window Substring/README_EN.md @@ -252,6 +252,44 @@ public class Solution { } ``` +### **Rust** + +```rust +impl Solution { + pub fn min_window(s: String, t: String) -> String { + let (mut need, mut window, mut cnt) = ([0; 256], [0; 256], 0); + for c in t.chars() { + need[c as usize] += 1; + } + let (mut j, mut k, mut mi) = (0, -1, 1 << 31); + for (i, c) in s.chars().enumerate() { + window[c as usize] += 1; + if need[c as usize] >= window[c as usize] { + cnt += 1; + } + + while cnt == t.len() { + if i - j + 1 < mi { + k = j as i32; + mi = i - j + 1; + } + let l = s.chars().nth(j).unwrap() as usize; + if need[l] >= window[l] { + cnt -= 1; + } + window[l] -= 1; + j += 1; + } + } + if k < 0 { + return "".to_string(); + } + let k = k as usize; + s[k..k + mi].to_string() + } +} +``` + ### **...** ``` diff --git a/solution/0000-0099/0076.Minimum Window Substring/Solution.rs b/solution/0000-0099/0076.Minimum Window Substring/Solution.rs new file mode 100644 index 0000000000000..45e49fb07a1c7 --- /dev/null +++ b/solution/0000-0099/0076.Minimum Window Substring/Solution.rs @@ -0,0 +1,33 @@ +impl Solution { + pub fn min_window(s: String, t: String) -> String { + let (mut need, mut window, mut cnt) = ([0; 256], [0; 256], 0); + for c in t.chars() { + need[c as usize] += 1; + } + let (mut j, mut k, mut mi) = (0, -1, 1 << 31); + for (i, c) in s.chars().enumerate() { + window[c as usize] += 1; + if need[c as usize] >= window[c as usize] { + cnt += 1; + } + + while cnt == t.len() { + if i - j + 1 < mi { + k = j as i32; + mi = i - j + 1; + } + let l = s.chars().nth(j).unwrap() as usize; + if need[l] >= window[l] { + cnt -= 1; + } + window[l] -= 1; + j += 1; + } + } + if k < 0 { + return "".to_string(); + } + let k = k as usize; + s[k..k + mi].to_string() + } +}