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.
Example 2:
Input: path = "NESWW" Output: true Explanation: Notice that the path visits the origin twice.
Constraints:
1 <= path.length <= 10^4
path
will only consist of characters in{'N', 'S', 'E', 'W}
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Solution { | |
public boolean isPathCrossing(String path) { | |
Set<String> visited = new HashSet<String>(); | |
int r = 0, c = 0; | |
visited.add(r + "," + c); | |
for (int i = 0; i < path.length(); i++) { | |
char ch = path.charAt(i); | |
switch (ch) { | |
case 'N': | |
r--; | |
break; | |
case 'E': | |
c++; | |
break; | |
case 'W': | |
c--; | |
break; | |
case 'S': | |
r++; | |
} | |
String key = r + "," + c; | |
if (visited.contains(key)) { | |
return true; | |
} | |
visited.add(key); | |
} | |
return false; | |
} | |
} |