Daily 23/12/2023: [1496. Path Crossing](https://leetcode.com/problems/path-crossing/)
# 1. Tóm tắt đề bài
Cho một chuỗi ```path```, trong đó ```path[i] = 'N', 'S', 'E'hoặc 'W'```, mỗi chuỗi đại diện cho việc di chuyển một đơn vị tương ứng về phía bắc, nam, đông hoặc tây. Bạn bắt đầu từ điểm gốc ```(0, 0)``` trên mặt phẳng 2D và đi trên con đường được chỉ định bởi ```path```.
Trả lại ```true``` nếu đường dẫn đi qua chính nó tại bất kỳ điểm nào, tức là nếu bất kỳ lúc nào bạn đang ở vị trí mà bạn đã ghé thăm trước đó. Nếu không trả về ```false```.
#### Giới hạn
- $-1 \le$ ```path.length``` $\le 10^4$
# 2. Tóm tắt lời giải
#### Phân tích
- Với bài này thực chất chỉ là kiểm tra khả năng ```if else``` mà thôi.
- Với mỗi hướng bạn cộng tọa độ phù hợp, hoặc có thể dùng ```map``` để lưu các tọa độ cộng.
# 3. Lời giải chi tiết
#### Code
```python
class Solution:
def isPathCrossing(self, path: str) -> bool:
moves = {
"N": (0, 1),
"S": (0, -1),
"W": (-1, 0),
"E": (1, 0)
}
visited = {(0, 0)}
x = 0
y = 0
for c in path:
dx, dy = moves[c]
x += dx
y += dy
if (x, y) in visited:
return True
visited.add((x, y))
return False
```
#### Độ phức tạp
$O(n)$
# 4. Kết luận & gợi ý mở rộng
- Đây là một bài luyện tâp cấu trúc dữ liệu dạng ```Hash Table```
> Hãy dùng nghị lực và sự kiên trì để đánh bại mọi thứ.
###### #Hashtag: <span style='color: blue'>Hash Table, String</span>