package LeetCode_1496 /** * 1496. Path Crossing * https://leetcode.com/problems/path-crossing/ * Given a string path, where path[i] = 'N', 'S', 'E' or 'W', * each representing moving one unit north, south, east, or west, respectively. * You start at the origin (0, 0) on a 2D plane and walk on the path specified by path. Return True if the path crosses itself at any point, that is, if at any time you are on a location you've previously visited. Return False otherwise. Example 1: Input: path = "NES" Output: false Explanation: Notice that the path doesn't cross any point more than once. * */ class Solution { /* * solution: HashSet, checking position if had walk before, Time:O(n), Space:O(n) * */ fun isPathCrossing(path: String): Boolean { val set = HashSet<Pair<Int, Int>>() //add starting point set.add(Pair(0, 0)) var x = 0 var y = 0 for (c in path) { when (c) { 'N' -> y++//north 'S' -> y--//south 'E' -> x++//east 'W' -> x--//west } val location = Pair(x, y) if (set.contains(location)) { return true } set.add(location) } return false } }