Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมหาสตริงสุดท้ายหลังเลื่อนตัวอักษรตามจำนวนตำแหน่งที่กำหนดใน Python

สมมติว่าเรามีสตริงพิมพ์เล็ก 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"

ขั้นตอนการแก้ปัญหา

  1. start := ASCII ของ "a"
  2. res := รายการของ ASCII(i - start) สำหรับแต่ละ i ใน s
  3. สำหรับ i ในช่วง ขนาดของ shifts - 2 ลงถึง 0:
    • shifts[i] := shifts[i] + shifts[i + 1]
  4. สำหรับ i ในช่วง 0 ถึง ขนาดของ s - 1:
    • c := (res[i] + shifts[i]) % 26
    • res[i] := ตัวอักษรที่มี ASCII (c + start)
  5. รวมตัวอักษรใน 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