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

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


สมมติว่าเรามีสตริงตัวพิมพ์เล็ก s และรายการจำนวนเต็มอื่นที่เรียกว่า shift ซึ่งมีความยาวเท่ากับความยาวของ s ที่นี่แต่ละองค์ประกอบใน shifts[i] ระบุว่าให้เปลี่ยน i + 1 ตัวอักษรแรกของ s ตามตำแหน่ง shifts[i] หากเปลี่ยนเกียร์ไขว้ 'z' จะถูกตัดเป็น 'a' เราต้องหาสตริงผลลัพธ์หลังจากใช้ shift กับ s

ดังนั้น หากอินพุตเป็น s ="tomato" shifts =[2, 5, 2, 3, 7, 4] เอาต์พุตจะเป็น "qjcoes" ดังนั้นหลังจากขยับอักขระตัวแรก 2 ตำแหน่งแล้ว จะเป็น 't ' ถึง 'v' ดังนั้นสตริงจึงเป็น "vomato" หลังจากนั้นอักขระสองตัวแรก 5 ตำแหน่ง ตอนนี้สตริงจะเป็น "atmato" เช่นนั้นในที่สุดสตริงจะเป็น "qjcoes"

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

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

อินพุต

[2, 1], 3, 2

ผลลัพธ์

qjcoes