1128. Number of Equivalent Domino Pairs

Given a list of dominoesdominoes[i] = [a, b] is equivalent to dominoes[j] = [c, d] if and only if either (a==c and b==d), or (a==d and b==c) - that is, one domino can be rotated to be equal to another domino.

Return the number of pairs (i, j) for which 0 <= i < j < dominoes.length, and dominoes[i] is equivalent to dominoes[j].

 

Example 1:

Input: dominoes = [[1,2],[2,1],[3,4],[5,6]]
Output: 1

 

Constraints:

  • 1 <= dominoes.length <= 40000
  • 1 <= dominoes[i][j] <= 9

Rust Solution

struct Solution;

use std::collections::HashMap;

impl Solution {
    fn num_equiv_domino_pairs(dominoes: Vec<Vec<i32>>) -> i32 {
        let mut hs: HashMap<Vec<i32>, i32> = HashMap::new();
        let mut sum = 0;
        for d in dominoes {
            let a = d[0];
            let b = d[1];
            if a < b {
                *hs.entry(vec![a, b]).or_default() += 1;
            } else {
                *hs.entry(vec![b, a]).or_default() += 1;
            }
        }
        for v in hs.values() {
            sum += v * (v - 1) / 2;
        }
        sum
    }
}

#[test]
fn test() {
    let dominoes: Vec<Vec<i32>> = vec_vec_i32![[1, 2], [2, 1], [3, 4], [5, 6]];
    assert_eq!(Solution::num_equiv_domino_pairs(dominoes), 1);
}

Having problems with this solution? Click here to submit an issue on github.