**Input:** p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1]
**Output:** true
**Input:** p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,12]
**Output:** false
**Input:** p1 = [1,0], p2 = [-1,0], p3 = [0,1], p4 = [0,-1]
**Output:** true
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