สมมติว่าเราอยู่ที่ตำแหน่ง (0, 0) เรามีสตริงที่แสดงถึงทิศทางที่ต่อเนื่องกันโดยใช้ตัวอักษรสี่ตัว เราต้องตรวจสอบว่าเราสามารถกลับมาที่ตำแหน่ง (0, 0) ได้หรือไม่หลังจากพิจารณาทิศทางที่กำหนดทั้งหมด สัญลักษณ์คือ
- E สำหรับตะวันออก
- W สำหรับทิศตะวันตก
- N สำหรับทิศเหนือ
- S สำหรับภาคใต้
ดังนั้น หากอินพุตเป็นเหมือน "EENWWS" เอาต์พุตจะเป็นจริง ย้ายไปทางตะวันออก 2 หน่วย จากนั้นไปทางเหนือ จากนั้นไปทางตะวันตก 2 หน่วยแล้วตามด้วยอีกครั้งทางใต้ ดังนั้นนี่คือตำแหน่งเริ่มต้น
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- l :=ขนาดของอาร์เรย์ย้าย
- ถ้า l เหมือนกับ 0 แล้ว −
- คืนค่าจริง
- lft :=0, ขึ้น :=0
- สำหรับการเริ่มต้น i :=0 เมื่อฉัน
- ถ้าย้าย[i]เหมือนกับ 'W' แล้ว −
- (เพิ่ม lft ขึ้น 1)
- ถ้าย้าย[i]เหมือนกับ 'E' แล้ว −
- (ลด lft ทีละ 1)
- ถ้าย้าย[i]เหมือนกับ 'N' แล้ว −
- (เพิ่มขึ้น 1)
- ถ้าย้าย[i]เหมือนกับ 'S' แล้ว:
- (ลดลง 1)
- ถ้าย้าย[i]เหมือนกับ 'W' แล้ว −
- คืนค่าจริง
ตัวอย่าง (C++)
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#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"));
} อินพุต
"EENWWS"
ผลลัพธ์
1