สมมติว่าเราอยู่ที่ตำแหน่ง (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