Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình lấy chuỗi cuối cùng sau khi chuyển các ký tự với số vị trí nhất định trong Python

Giả sử chúng ta có một chuỗi chữ thường s và một danh sách các số nguyên khác được gọi là dịch chuyển có độ dài bằng độ dài của s. Ở đây mỗi phần tử trong ca dao [i] chỉ ra rằng nó sẽ dịch chuyển i + 1 chữ cái đầu tiên của s theo dịch chuyển [i] vị trí. Nếu chuyển dịch vượt qua 'z', nó sẽ được bao bọc thành 'a'. Chúng tôi phải tìm chuỗi kết quả sau khi áp dụng các thay đổi đối với s.

Vì vậy, nếu đầu vào giống như s ="cà chua" thay đổi =[2, 5, 2, 3, 7, 4], thì đầu ra sẽ là "qjcoes", vì vậy sau khi dịch ký tự đầu tiên 2 vị trí, nó sẽ là 't 'thành' v ', vì vậy chuỗi là "vomato", Sau hai ký tự đầu tiên là 5 vị trí. chuỗi bây giờ sẽ là "atmato" như vậy cuối cùng chuỗi sẽ là "qjcoes".

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • start:=ASCII của "a"
  • res:=danh sách ASCII của (i - start) cho mỗi i trong s
  • đối với tôi trong phạm vi kích thước ca - 2 thành 0, giảm 1, thực hiện
    • ca dao [i]:=ca [i] + ca [i + 1]
  • đối với tôi trong phạm vi từ 0 đến kích thước là s-1, hãy thực hiện
    • c:=(res [i] + shi shift [i]) mod 26
    • res [i]:=ký tự với ASCII (c + start)
  • nối các chữ cái res thành một chuỗi và trả về

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

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))

Đầu vào

[2, 1], 3, 2

Đầu ra

qjcoes