rustgym 0.2.0

rustgym solutions
Documentation
struct Solution;

use std::collections::HashMap;
use std::collections::HashSet;

impl Solution {
    fn palindrome_pairs(words: Vec<String>) -> Vec<Vec<i32>> {
        let mut id: HashMap<String, usize> = HashMap::new();
        let n = words.len();
        let mut res = HashSet::new();
        for i in 0..n {
            id.insert(words[i].to_string(), i);
        }
        for i in 0..n {
            let k = words[i].len();
            for mid in 0..=k {
                let left: String = words[i][0..mid].to_string();
                let right: String = words[i][mid..].to_string();
                if Self::is_palindrome(&left) {
                    let right_r: String = right.chars().rev().collect();
                    if let Some(&j) = id.get(&right_r) {
                        if i != j {
                            res.insert(vec![j as i32, i as i32]);
                        }
                    }
                }
                if Self::is_palindrome(&right) {
                    let left_r: String = left.chars().rev().collect();
                    if let Some(&j) = id.get(&left_r) {
                        if i != j {
                            res.insert(vec![i as i32, j as i32]);
                        }
                    }
                }
            }
        }
        res.into_iter().collect()
    }

    fn is_palindrome(s: &str) -> bool {
        !s.chars().zip(s.chars().rev()).any(|(a, b)| a != b)
    }
}

#[test]
fn test() {
    let words = vec_string!["abcd", "dcba", "lls", "s", "sssll"];
    let mut res = vec![[0, 1], [1, 0], [3, 2], [2, 4]];
    let mut ans = Solution::palindrome_pairs(words);
    res.sort_unstable();
    ans.sort_unstable();
    assert_eq!(ans, res);
    let words = vec_string!["bat", "tab", "cat"];
    let mut res = vec![[0, 1], [1, 0]];
    let mut ans = Solution::palindrome_pairs(words);
    res.sort_unstable();
    ans.sort_unstable();
    assert_eq!(ans, res);
}