Giả sử chúng ta đang ở vị trí (0, 0) Chúng ta có một chuỗi biểu diễn các hướng liên tiếp sử dụng bốn chữ cái. Chúng ta phải kiểm tra xem chúng ta có thể quay trở lại ở vị trí (0, 0) hay không sau khi xem xét tất cả các hướng đã cho. Các ký hiệu là
- E cho phía đông
- Đi về phía Tây
- N cho phía bắc
- S cho phía nam.
Vì vậy, nếu đầu vào giống như "EENWWS", thì đầu ra sẽ là true, di chuyển về phía đông hai đơn vị, sau đó đi về phía bắc, sau đó về phía tây hai đơn vị rồi lại về phía nam, vì vậy đây là vị trí bắt đầu.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- l:=kích thước của mảng di chuyển
- nếu l giống 0, thì -
- trả về true
- lft:=0, up:=0
- để khởi tạo i:=0, khi i
- nếu di chuyển [i] giống với 'W', thì -
- (tăng lft thêm 1)
- nếu di chuyển [i] giống với 'E', thì -
- (giảm lft đi 1)
- nếu di chuyển [i] giống với 'N', thì -
- (tăng lên 1)
- nếu di chuyển [i] giống với 'S', thì:
- (giảm lên 1)
- nếu di chuyển [i] giống với 'W', thì -
- trả về true
Ví dụ (C ++)
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
#include <bits/stdc++.h> using namespace std; class Solution { public: bool solve(string moves) { int l = moves.length(); if (l == 0) { return true; } int lft = 0, up = 0; for (int i = 0; i < l; i++) { if (moves[i] == 'W') { lft++; } if (moves[i] == 'E') { lft--; } if (moves[i] == 'N') { up++; } if (moves[i] == 'S') { up--; } } if (lft == 0 && up == 0) { return true; } return false; } }; } main(){ Solution ob; cout << (ob.solve("EENWWS")); }
Đầu vào
"EENWWS"
Đầu ra
1