สมมติว่าเรามีสตริงสองตัว s และ t เราต้องตรวจสอบว่าสามารถได้ s โดยการหมุน t สองตำแหน่งในทิศทางซ้ายหรือขวาได้หรือไม่
เช่น ถ้าอินพุตเป็น s = "kolkata", t = "takolka" ผลลัพธ์จะเป็น True เนื่องจากเราสามารถหมุน "takolka" ไปทางซ้ายสองครั้งเพื่อได้ "kolkata"
ในการแก้ปัญหานี้ เราจะทำตามขั้นตอนดังนี้:
- ถ้าขนาดของ s ไม่เท่ากับขนาดของ t แล้ว
- คืนค่า False
- right_rot := สตริงว่าง
- left_rot := สตริงว่าง
- l := ขนาดของ t
- left_rot := left_rot ต่อ t[จากดัชนี l - 2 ถึงสุด] ต่อ t[จากดัชนี 0 ถึง l - 3]
- right_rot := right_rot ต่อ t[จากดัชนี 2 ถึงสุด] ต่อ t[จากดัชนี 0 ถึง 1]
- คืนค่า true เมื่อ (s เท่ากับ right_rot หรือ s เท่ากับ left_rot) มิฉะนั้น false
ลองดูการนำไปใช้ดังต่อไปนี้เพื่อเข้าใจได้ดียิ่งขึ้น:
ตัวอย่าง
def solve(s, t):
if (len(s) != len(t)):
return False
right_rot = ""
left_rot = ""
l = len(t)
left_rot = (left_rot + t[l - 2:] + t[0: l - 2])
right_rot = right_rot + t[2:] + t[0:2]
return (s == right_rot or s == left_rot)
s = "kolkata"
t = "takolka"
print(solve(s, t))
อินพุต
"kolkata", "takolka"
ผลลัพธ์
True