1496. Path Crossing

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
    }
}

 

posted @ 2020-12-20 20:35  johnny_zhao  阅读(103)  评论(0编辑  收藏  举报