20240113 Finished
This commit is contained in:
parent
e2e9269ec2
commit
d73d1ab43a
|
@ -15,3 +15,4 @@ mod p0004_median_of_two_sorted_arrays;
|
|||
mod p0743_network_delay_time;
|
||||
mod p0447_number_of_boomerangs;
|
||||
mod p2085_count_common_words_with_one_occurrence;
|
||||
mod p2182_construct_string_with_repeat_limit;
|
69
src/problem/p2182_construct_string_with_repeat_limit.rs
Normal file
69
src/problem/p2182_construct_string_with_repeat_limit.rs
Normal file
|
@ -0,0 +1,69 @@
|
|||
/**
|
||||
* [2182] Construct String With Repeat Limit
|
||||
*/
|
||||
pub struct Solution {}
|
||||
|
||||
|
||||
// submission codes start here
|
||||
use std::collections::BTreeMap;
|
||||
|
||||
impl Solution {
|
||||
pub fn repeat_limited_string(s: String, repeat_limit: i32) -> String {
|
||||
let mut dict = BTreeMap::new();
|
||||
|
||||
for c in s.chars() {
|
||||
let entry = dict.entry(c).or_insert(0);
|
||||
*entry += 1;
|
||||
}
|
||||
|
||||
let mut result = Vec::new();
|
||||
|
||||
while !dict.is_empty() {
|
||||
if let Some((key, mut value)) = dict.pop_last() {
|
||||
let mut count = 0;
|
||||
while value > 0 {
|
||||
if count < repeat_limit {
|
||||
result.push(key);
|
||||
count += 1;
|
||||
value -= 1;
|
||||
} else {
|
||||
match dict.last_entry() {
|
||||
None => {
|
||||
break;
|
||||
}
|
||||
Some(mut entry) => {
|
||||
result.push(*entry.key());
|
||||
entry.insert(*entry.get() - 1);
|
||||
|
||||
if entry.get() == &0 {
|
||||
entry.remove();
|
||||
}
|
||||
|
||||
count = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
result.iter().collect()
|
||||
}
|
||||
}
|
||||
|
||||
// submission codes end
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_2182() {
|
||||
assert_eq!(String::from("zzcccac"), Solution::repeat_limited_string(
|
||||
String::from("cczazcc"), 3
|
||||
));
|
||||
assert_eq!(String::from("bbabaa"), Solution::repeat_limited_string(
|
||||
String::from("aababab"), 2
|
||||
));
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user