2381. Beralih Huruf II
Kesukaran: Sederhana
Topik: Tatasusunan, Rentetan, Jumlah Awalan
Anda diberi rentetan s huruf Inggeris huruf kecil dan tatasusunan integer 2D beralih di mana anjakan[i] = [mulai, tamati, arahi]. Untuk setiap i, anjakan aksara dalam s daripada indeks bermulai ke hujung indeksi (inklusif) ke hadapan jika arahi = 1, atau alihkan aksara ke belakang jika arahi = 0.
Menukar aksara ke hadapan bermaksud menggantikannya dengan huruf seterusnya dalam abjad (membalut supaya 'z' menjadi 'a'). Begitu juga, mengalihkan aksara ke belakang bermaksud menggantikannya dengan huruf sebelumnya dalam abjad (membalut supaya 'a' menjadi 'z').
Kembalikan rentetan akhir selepas semua peralihan kepada s digunakan.
Contoh 1:
Contoh 2:
Kekangan:
Petunjuk:
Penyelesaian:
Kita perlu mengelak daripada menukar aksara satu demi satu untuk setiap syif, kerana ini akan menjadi terlalu perlahan untuk input yang besar. Sebaliknya, kita boleh menggunakan pendekatan yang lebih optimum dengan memanfaatkan teknik yang dipanggil jumlah awalan.
Mari laksanakan penyelesaian ini dalam PHP: 2381. Beralih Huruf II
Penjelasan:
- Untuk setiap anjakan [mula, tamat, arah], kami akan menambah tatasusunan anjakan pada permulaan dan susut pada penghujung 1. Ini membolehkan kami menjejaki permulaan dan penghujung julat anjakan.
- Selepas memproses semua anjakan, kami menggunakan jumlah awalan pada tatasusunan anjakan untuk mendapatkan anjakan kumulatif pada setiap indeks.
- Akhir sekali, kami menggunakan anjakan kumulatif pada setiap aksara dalam rentetan.
Penjelasan Kod:
- Penghuraian Input: Kami menukar rentetan input s kepada susunan aksara untuk manipulasi yang lebih mudah.
- Shift Array: Kami memulakan tatasusunan anjakan saiz n 1 kepada sifar. Tatasusunan ini digunakan untuk menjejaki kesan anjakan. Untuk setiap anjakan [mula, tamat, arah], kami melaraskan nilai pada anjakan[mula] dan anjakan[akhir 1] untuk mencerminkan permulaan dan akhir anjakan.
- Jumlah Awalan: Kami mengira jumlah anjakan untuk setiap aksara dengan mengulangi tatasusunan anjakan dan mengekalkan jumlah terkumpul anjakan.
- Peralihan Aksara: Untuk setiap aksara dalam rentetan, kami mengira aksara teranjak terakhir menggunakan formula (ord(currentChar) - ord('a') totalShift) % 26, yang merangkumi sifat bulat bagi abjad.
- Keputusan Pengembalian: Rentetan akhir diperoleh dengan menukar tatasusunan aksara kembali menjadi rentetan dan mengembalikannya.
Kerumitan Masa:
Penyelesaian ini menangani masalah dengan cekap walaupun dengan had atas kekangan input.
Pautan Kenalan
Jika anda mendapati siri ini membantu, sila pertimbangkan untuk memberi repositori bintang di GitHub atau berkongsi siaran pada rangkaian sosial kegemaran anda ?. Sokongan anda amat bermakna bagi saya!
Jika anda mahukan kandungan yang lebih berguna seperti ini, sila ikuti saya:
Atas ialah kandungan terperinci Beralih Huruf II. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!