1128. Number of Equivalent Domino Pairs

Given a list of `dominoes``dominoes[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`

1128. Number of Equivalent Domino Pairs
``````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);
}
``````