สมมติว่าเรามีสตริงพิมพ์เล็ก s และรายการจำนวนเต็มชื่อ shifts ที่มีความยาวเท่ากับความยาวของ s แต่ละสมาชิก shifts[i] บอกให้เลื่อนตัวอักษร i+1 ตัวแรกของ s จำนวน shifts[i] ตำแหน่ง หากเลื่อนเกิน 'z' จะวนกลับมาที่ 'a' เราต้องหาสตริงผลลัพธ์หลังนำไปใช้ shifts กับ s
เช่น ถ้าอินพุตคือ s = "tomato", shifts = [2, 5, 2, 3, 7, 4] ผลลัพธ์จะเป็น "qjcoes" หลังเลื่อนตัวแรก 2 ตำแหน่ง 't' กลายเป็น 'v' สตริงกลายเป็น "vomato" แล้วเลื่อน 2 ตัวแรก 5 ตำแหน่ง กลายเป็น "atmato" และทำต่อจนได้ "qjcoes"
ขั้นตอนการแก้ปัญหา
start := ASCII ของ "a"res := รายการของ ASCII(i - start) สำหรับแต่ละ i ใน s- สำหรับ
iในช่วงขนาดของ shifts - 2ลงถึง0:shifts[i] := shifts[i] + shifts[i + 1]
- สำหรับ
iในช่วง0ถึงขนาดของ s - 1:c := (res[i] + shifts[i]) % 26res[i] := ตัวอักษรที่มี ASCII (c + start)
- รวมตัวอักษรใน
resเป็นสตริงและคืนค่า
ตัวอย่างการใช้งาน
def solve(s, shifts):
start = ord("a")
res = [ord(i) - start for i in s]
for i in range(len(shifts) - 2, -1, -1):
shifts[i] += shifts[i + 1]
for i in range(len(s)):
c = (res[i] + shifts[i]) % 26
res[i] = chr(c + start)
return "".join(res)
s = "tomato"
shifts = [2, 5, 2, 3, 7, 4]
print(solve(s, shifts))
อินพุต
"tomato", [2, 5, 2, 3, 7, 4]
เอาต์พุต
qjcoes