20250119 finished.
This commit is contained in:
parent
410e0fedef
commit
d6cb6aae1f
|
@ -440,3 +440,5 @@ mod p3095_shortest_subarray_with_or_at_least_k_i;
|
||||||
mod p3097_shortest_subarray_with_or_at_least_k_ii;
|
mod p3097_shortest_subarray_with_or_at_least_k_ii;
|
||||||
|
|
||||||
mod p3287_find_the_maximum_sequence_value_of_array;
|
mod p3287_find_the_maximum_sequence_value_of_array;
|
||||||
|
|
||||||
|
mod p2266_count_number_of_texts;
|
||||||
|
|
92
src/problem/p2266_count_number_of_texts.rs
Normal file
92
src/problem/p2266_count_number_of_texts.rs
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
/**
|
||||||
|
* [2266] Count Number of Texts
|
||||||
|
*/
|
||||||
|
pub struct Solution {}
|
||||||
|
|
||||||
|
// submission codes start here
|
||||||
|
use std::collections::HashSet;
|
||||||
|
|
||||||
|
const MODE: i64 = 1_000_000_007;
|
||||||
|
|
||||||
|
impl Solution {
|
||||||
|
pub fn count_texts(pressed_keys: String) -> i32 {
|
||||||
|
let three_keys = HashSet::from(['2', '3', '4', '5', '6', '8']);
|
||||||
|
let pressed_keys: Vec<char> = pressed_keys.chars().collect();
|
||||||
|
|
||||||
|
let mut three_dp = Vec::from([0, 1, 2, 4]);
|
||||||
|
let mut four_dp = Vec::from([0, 1, 2, 4, 8]);
|
||||||
|
|
||||||
|
let mut get_three = |n: usize| {
|
||||||
|
if n >= three_dp.len() {
|
||||||
|
for i in three_dp.len()..=n {
|
||||||
|
three_dp.push((three_dp[i - 1] + three_dp[i - 2] + three_dp[i - 3]) % MODE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
three_dp[n]
|
||||||
|
};
|
||||||
|
|
||||||
|
let mut get_four = |n: usize| {
|
||||||
|
if n >= four_dp.len() {
|
||||||
|
for i in four_dp.len()..=n {
|
||||||
|
four_dp.push(
|
||||||
|
(four_dp[i - 1] + four_dp[i - 2] + four_dp[i - 3] + four_dp[i - 4]) % MODE,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
four_dp[n]
|
||||||
|
};
|
||||||
|
|
||||||
|
let mut last_key = None;
|
||||||
|
let mut count = 0;
|
||||||
|
let mut result = 1;
|
||||||
|
|
||||||
|
for c in pressed_keys {
|
||||||
|
if let Some(last) = last_key {
|
||||||
|
if last == c {
|
||||||
|
count += 1;
|
||||||
|
} else {
|
||||||
|
if three_keys.contains(&last) {
|
||||||
|
result = result * get_three(count) % MODE;
|
||||||
|
} else {
|
||||||
|
result = result * get_four(count) % MODE;
|
||||||
|
}
|
||||||
|
|
||||||
|
last_key = Some(c);
|
||||||
|
count = 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
last_key = Some(c);
|
||||||
|
count = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Some(last) = last_key {
|
||||||
|
if three_keys.contains(&last) {
|
||||||
|
result = result * get_three(count) % MODE;
|
||||||
|
} else {
|
||||||
|
result = result * get_four(count) % MODE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
result as i32
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// submission codes end
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_2266() {
|
||||||
|
assert_eq!(3136, Solution::count_texts("444479999555588866".to_owned()));
|
||||||
|
assert_eq!(8, Solution::count_texts("22233".to_owned()));
|
||||||
|
assert_eq!(
|
||||||
|
82876089,
|
||||||
|
Solution::count_texts("222222222222222222222222222222222222".to_owned())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user