# 0593. Valid Square

https://leetcode.com/problems/valid-square

## Description

Given the coordinates of four points in 2D space `p1`, `p2`, `p3` and `p4`, return `true` _if the four points construct a square_.

The coordinate of a point `pi` is represented as `[xi, yi]`. The input is **not** given in any order.

A **valid square** has four equal sides with positive length and four equal angles (90-degree angles).

**Example 1:**

```
**Input:** p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1]
**Output:** true
```

**Example 2:**

```
**Input:** p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,12]
**Output:** false
```

**Example 3:**

```
**Input:** p1 = [1,0], p2 = [-1,0], p3 = [0,1], p4 = [0,-1]
**Output:** true
```

**Constraints:**

* `p1.length == p2.length == p3.length == p4.length == 2`
* `-104 <= xi, yi <= 104`

## ac

```java
class Solution {
    public boolean validSquare(int[] p1, int[] p2, int[] p3, int[] p4) {
        Map<Long, Integer> map = new HashMap<>();
        map.put(getDist(p1, p2), map.getOrDefault(getDist(p1, p2), 0) + 1);
        map.put(getDist(p1, p3), map.getOrDefault(getDist(p1, p3), 0) + 1);
        map.put(getDist(p1, p4), map.getOrDefault(getDist(p1, p4), 0) + 1);
        map.put(getDist(p2, p3), map.getOrDefault(getDist(p2, p3), 0) + 1);
        map.put(getDist(p2, p4), map.getOrDefault(getDist(p2, p4), 0) + 1);
        map.put(getDist(p3, p4), map.getOrDefault(getDist(p3, p4), 0) + 1);

        if (map.size() != 2) return false;

        long max = 0;
        for (long key : map.keySet()) {
            max = Math.max(max, key);
        }

        return map.get(max) == 2;
    }

    private long getDist(int[] p1, int[] p2) {
        return (long) Math.pow((p1[0] - p2[0]), 2) + (long) Math.pow((p1[1] - p2[1]), 2);
    }
}
// calculate 6 edges, and inspect them. square should have 2 max length, 4 edge length
```
