1496 Path Crossing - Easy
Problem:
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 <= 104path[i]is either'N','S','E', or'W'.
Problem Analysis:
High-Level Strategy:
- The solution uses a set to keep track of visited points as the path progresses.
- It iterates through the given path string, updating the current position based on the direction specified in the path.
- At each step, it checks whether the current position has been visited before. If yes, it indicates a crossing path, and the function returns
True. - If the entire path is traversed without any revisits, the function returns
False, indicating no crossing.
Complexity:
- Let n be the length of the path.
- The function iterates through the path string once, performing constant time operations for each step.
- Therefore, the time complexity is O(n).
- The set
visitedstores at most n distinct points, so the space complexity is also O(n).
Solutions:
class Solution:
def isPathCrossing(self, path: str) -> bool:
dir = {
"N": [0,1],
"S": [0, -1],
"E": [1,0],
"W": [-1, 0]
}
visited = set()
x, y = 0, 0
for i in path:
visited.add((x,y))
dx, dy = dir[i]
x, y = x + dx, y + dy
if (x,y) in visited:
return True
return False
Walter Teng.