rustgym 0.2.0

rustgym solutions
Documentation
struct Solution;

use std::collections::HashMap;

impl Solution {
    fn is_valid_palindrome(s: String, k: i32) -> bool {
        let mut memo: HashMap<&str, usize> = HashMap::new();
        let k = k as usize;
        Self::dp(&s, &mut memo) <= k
    }

    fn dp<'a>(s: &'a str, memo: &mut HashMap<&'a str, usize>) -> usize {
        if s.len() < 2 {
            return 0;
        }
        if let Some(&res) = memo.get(&s) {
            return res;
        }
        let n = s.len();
        let res = if s.chars().next().unwrap() == s.chars().next_back().unwrap() {
            Self::dp(&s[1..n - 1], memo)
        } else {
            Self::dp(&s[0..n - 1], memo).min(Self::dp(&s[1..n], memo)) + 1
        };
        memo.insert(s, res);
        res
    }
}

#[test]
fn test() {
    let s = "abcdeca".to_string();
    let k = 2;
    let res = true;
    assert_eq!(Solution::is_valid_palindrome(s, k), res);
}