# 593. Valid Square

```
根据初中几何的知识可以知道正方形的四条边相等，两条对角线相等，满足这两个条件的四边形一定是正方形。

那么这样就好办了，只需要对四个点，两两之间算距离，如果计算出某两个点之间距离为0，
说明两点重合了，直接返回 false，

如果不为0，那么就建立距离和其出现次数之间的映射，最后如果我们只得到了 两个不同 的距离长度，
那么就说明是正方形了
```



T: O(1)

S: O(1)

```java
class Solution {
    public boolean validSquare(int[] p1, int[] p2, int[] p3, int[] p4) {
        Set<Integer> set = new HashSet<>();
        set.add(dist(p1,p2));
        set.add(dist(p1,p3));
        set.add(dist(p1,p4));
        set.add(dist(p2,p3));
        set.add(dist(p2,p4));
        set.add(dist(p3,p4));
        return !set.contains(0) && set.size() == 2;
    }
    // (x0, y0) and (y0, y1)
    // dist = (x0 - x1)^2 + (y0 - y1)^2
    private int dist(int[] p1, int[] p2) {
        return (p1[0]-p2[0])*(p1[0]-p2[0]) + (p1[1]-p2[1])*(p1[1]-p2[1]);
    }
}


/*

[0,0]   [1,0], p2 = [1,1], p3 = [1,0], p4 = [0,1]
[0,1]   [1,1]


[1,0], p2 = , p3 = [0,1], p4 = [0,-1]

        [0,1]
[-1,0]        [1,0]
       [0,-1]
       

*/
```
