Wednesday, August 5, 2020

1496. Path Crossing ---E

Q:

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

class Solution {
public:
    bool isPathCrossing(string path) {
        // sicne before C++20, cannot use pair for set<pair<>>, 
        unordered_set<int> S{0};
        int x  =0,y = 0;
        for(auto ch : path){
            if(ch == 'N')
                y++;
            if(ch == 'S')
                y--;
            if(ch == 'E')
                x++;
            if(ch == 'W')
                x--;
            int pos = x * 10001 + y;
            if(S.find(pos) != S.end()){
                return true;
            }
            S.insert(pos);
        }
        return false;
    }
};

No comments:

Post a Comment