1496. Path Crossing

Easy

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 have 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.

Example 2:

Input: path = "NESWW"
Output:
 true
Explanation:
 Notice that the path visits the origin twice.

Constraints:

  • 1 <= path.length <= 104

  • path[i] is either 'N', 'S', 'E', or 'W'.

解題

Runtime: 0 ms, faster than 100.00%

Memory Usage: 2.2 MB, less than 26.09%

func isPathCrossing(path string) bool {
    visited := make(map[[2]int]bool)
    visited[[2]int{ 0, 0 }] = true
    x, y := 0, 0
    
    for _, char := range path {
        if char== 'N' {
            y++
        } else if char=='E' {
            x++
        } else if char=='S' {
            y--
        } else {
            x--
        }
        
        if _, ok := visited[[2]int{x, y}]; ok {
            return true
        } else {
            visited[[2]int{x, y}] = true
        }
    }
    
    return false
}

Last updated