20250110 finished.
This commit is contained in:
parent
6959050962
commit
9a4cee05f7
|
@ -422,3 +422,5 @@ mod p3019_number_of_changing_keys;
|
||||||
mod p2264_largest_3_same_digit_number_in_string;
|
mod p2264_largest_3_same_digit_number_in_string;
|
||||||
|
|
||||||
mod p3297_count_substrings_that_can_be_rearranged_to_contain_a_string_i;
|
mod p3297_count_substrings_that_can_be_rearranged_to_contain_a_string_i;
|
||||||
|
|
||||||
|
mod p3298_count_substrings_that_can_be_rearranged_to_contain_a_string_ii;
|
||||||
|
|
|
@ -0,0 +1,67 @@
|
||||||
|
/**
|
||||||
|
* [3298] Count Substrings That Can Be Rearranged to Contain a String II
|
||||||
|
*/
|
||||||
|
pub struct Solution {}
|
||||||
|
|
||||||
|
// submission codes start here
|
||||||
|
use std::collections::HashMap;
|
||||||
|
|
||||||
|
impl Solution {
|
||||||
|
pub fn valid_substring_count(word1: String, word2: String) -> i64 {
|
||||||
|
let word1: Vec<char> = word1.chars().collect();
|
||||||
|
let mut word_map = HashMap::with_capacity(26);
|
||||||
|
for c in word2.chars() {
|
||||||
|
let entry = word_map.entry(c).or_insert(0);
|
||||||
|
*entry -= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut result = 0;
|
||||||
|
let mut count = word_map.iter().filter(|c| c.1 < &0).count();
|
||||||
|
|
||||||
|
let mut right = 0;
|
||||||
|
for left in 0..word1.len() {
|
||||||
|
while right < word1.len() && count > 0 {
|
||||||
|
let entry = word_map.entry(word1[right]).or_insert(0);
|
||||||
|
*entry += 1;
|
||||||
|
if *entry == 0 {
|
||||||
|
count -= 1;
|
||||||
|
}
|
||||||
|
right += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if count == 0 {
|
||||||
|
result += (word1.len() - right + 1) as i64;
|
||||||
|
}
|
||||||
|
let entry = word_map.entry(word1[left]).or_insert(0);
|
||||||
|
*entry -= 1;
|
||||||
|
if *entry == -1 {
|
||||||
|
count += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
result
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// submission codes end
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_3298() {
|
||||||
|
assert_eq!(
|
||||||
|
1,
|
||||||
|
Solution::valid_substring_count("bcca".to_owned(), "abc".to_owned())
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
10,
|
||||||
|
Solution::valid_substring_count("abcabc".to_owned(), "abc".to_owned())
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
0,
|
||||||
|
Solution::valid_substring_count("abcabc".to_owned(), "aaabc".to_owned())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user