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}
Solution: Simulation + Hashtable
Time complexity: O(n)
Space complexity: O(n)
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// Author: Huahua class Solution { public: bool isPathCrossing(string path) { unordered_set<int> s; int x = 0; int y = 0; s.insert(x * 10000 + y); for (char d : path) { if (d == 'N') ++y; else if (d == 'S') --y; else if (d == 'E') ++x; else if (d == 'W') --x; if (!s.insert(x * 10000 + y).second) return true; } return false; } }; |
请尊重作者的劳动成果,转载请注明出处!花花保留对文章/视频的所有权利。
如果您喜欢这篇文章/视频,欢迎您捐赠花花。
If you like my articles / videos, donations are welcome.
Be First to Comment