Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Chương trình tìm chuỗi cuối cùng sau khi dịch chuyển ký tự Python

Cho chuỗi chữ thường s và mảng shifts cùng độ dài. shifts[i] dịch chuyển i+1 ký tự đầu tiên của s đi shifts[i] vị trí (quay vòng 'z'→'a'). Tìm chuỗi kết quả.

Ví dụ: s="tomato", shifts=[2,5,2,3,7,4] → "qjcoes".

Giải thuật (Tính tích lũy dịch chuyển ngược)

  1. Chuyển ký tự thành mã ASCII (0-25)
  2. Tính tổng tích lũy dịch chuyển từ cuối về đầu: shifts[i] += shifts[i+1]
  3. Áp dụng dịch chuyển cho từng ký tự: (char_code + shifts[i]) % 26
  4. Chuyển ngược về ký tự và nối chuỗi

Ví dụ triển khai

def solve(s, shifts):
    start = ord("a")
    res = [ord(ch) - start for ch 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)

print(solve("tomato", [2, 5, 2, 3, 7, 4]))

Đầu vào

"tomato", [2, 5, 2, 3, 7, 4]

Đầu ra

qjcoes