cari

Beralih Huruf II

Jan 05, 2025 pm 10:30 PM

Shifting Letters II

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:

  • Input: s = "abc", anjakan = [[0,1,0],[1,2,1],[0,2,1]]
  • Output: "ace"
  • Penjelasan: Mula-mula, alihkan aksara daripada indeks 0 kepada indeks 1 ke belakang. Sekarang s = "zac".
    • Kedua, alihkan aksara daripada indeks 1 kepada indeks 2 ke hadapan. Sekarang s = "zbd".
    • Akhir sekali, alihkan aksara daripada indeks 0 kepada indeks 2 ke hadapan. Sekarang s = "ace".

Contoh 2:

  • Input: s = "dztz", anjakan = [[0,0,0],[1,1,1]]
  • Output: "catz"
  • Penjelasan: Mula-mula, alihkan aksara daripada indeks 0 kepada indeks 0 ke belakang. Sekarang s = "cztz".
    • Akhir sekali, alihkan aksara daripada indeks 1 kepada indeks 1 ke hadapan. Sekarang s = "catz".

Kekangan:

  • 1 4
  • anjakan[i].panjang == 3
  • 0 i i
  • 0 i
  • s terdiri daripada huruf kecil Inggeris.

Petunjuk:

  1. Daripada mengalihkan setiap watak dalam setiap syif, bolehkah anda menjejaki watak yang dialihkan dan berapa banyak merentas semua syif?
  2. Cuba tandakan permulaan dan tamat setiap syif, kemudian lakukan jumlah awalan syif.

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.

Langkah-langkah:

  1. Tandai sempadan anjakan: Daripada mengalihkan setiap aksara serta-merta, kami menandakan kesan anjakan pada permulaan dan penghujung setiap julat.
  2. Gunakan jumlah awalan: Selepas menandakan semua anjakan, kita boleh mengira anjakan kumulatif pada setiap aksara menggunakan teknik jumlah awalan. Ini membolehkan kami menggunakan anjakan kumulatif dengan cekap pada setiap aksara.
  3. Lakukan anjakan: Setelah kita mengetahui jumlah anjakan untuk setiap aksara, kita boleh menggunakan anjakan (sama ada ke hadapan atau ke belakang) pada rentetan.

Mari laksanakan penyelesaian ini dalam PHP: 2381. Beralih Huruf II

<?php /**
 * @param String $s
 * @param Integer[][] $shifts
 * @return String
 */
function shiftingLetters($s, $shifts) {
    ...
    ...
    ...
    /**
     * go to ./solution.php
     */
}

// Test the function
$s1 = "abc";
$shifts1 = [[0, 1, 0], [1, 2, 1], [0, 2, 1]];
echo shiftingLetters($s1, $shifts1) . "\n";  // Output: "ace"

$s2 = "dztz";
$shifts2 = [[0, 0, 0], [1, 1, 1]];
echo shiftingLetters($s2, $shifts2) . "\n";  // Output: "catz"
?>

Penjelasan:

  1. 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.
  2. Selepas memproses semua anjakan, kami menggunakan jumlah awalan pada tatasusunan anjakan untuk mendapatkan anjakan kumulatif pada setiap indeks.
  3. Akhir sekali, kami menggunakan anjakan kumulatif pada setiap aksara dalam rentetan.

Penjelasan Kod:

  1. Penghuraian Input: Kami menukar rentetan input s kepada susunan aksara untuk manipulasi yang lebih mudah.
  2. 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.
  3. Jumlah Awalan: Kami mengira jumlah anjakan untuk setiap aksara dengan mengulangi tatasusunan anjakan dan mengekalkan jumlah terkumpul anjakan.
  4. 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.
  5. Keputusan Pengembalian: Rentetan akhir diperoleh dengan menukar tatasusunan aksara kembali menjadi rentetan dan mengembalikannya.

Kerumitan Masa:

  • Kerumitan masa: O(n m), dengan n ialah panjang rentetan s dan m ialah bilangan anjakan. Ini kerana kami mengulangi rentetan dan senarai anjakan sekali setiap satu.
  • Kerumitan ruang: O(n), dengan n ialah panjang rentetan s, disebabkan ruang yang diperlukan untuk tatasusunan anjakan.

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:

  • LinkedIn
  • GitHub

Atas ialah kandungan terperinci Beralih Huruf II. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Mengoptimumkan Kod PHP: Mengurangkan Penggunaan Memori & Masa PelaksanaanMengoptimumkan Kod PHP: Mengurangkan Penggunaan Memori & Masa PelaksanaanMay 10, 2025 am 12:04 AM

TooptimizephpcodeforreducedmemoryusageandexecutionTime, ikuti: 1) userereferencesInsteadofcopylylargedataStructureStructureStructureStoreducemoryconsumption.2)

E-mel PHP: Panduan Penghantaran Langkah demi LangkahE-mel PHP: Panduan Penghantaran Langkah demi LangkahMay 09, 2025 am 12:14 AM

PhpisusedforsendingemailsduetoitsintegrationWithservermailservicesandexternalsmtpproviders, automatingnotificationsandmarketingcampaigns.1) Setupyourphpenvironmentwithawebserverandphp, Memastikan

Cara Menghantar E -mel melalui PHP: Contoh & KodCara Menghantar E -mel melalui PHP: Contoh & KodMay 09, 2025 am 12:13 AM

Cara terbaik untuk menghantar e -mel ialah menggunakan perpustakaan phpmailer. 1) Menggunakan fungsi mel () adalah mudah tetapi tidak boleh dipercayai, yang boleh menyebabkan e -mel memasuki spam atau tidak dapat dihantar. 2) PHPMailer menyediakan kawalan dan kebolehpercayaan yang lebih baik, dan menyokong surat HTML, lampiran dan pengesahan SMTP. 3) Pastikan tetapan SMTP dikonfigurasi dengan betul dan penyulitan (seperti startTLS atau SSL/TLS) digunakan untuk meningkatkan keselamatan. 4) Untuk sejumlah besar e -mel, pertimbangkan untuk menggunakan sistem giliran mel untuk mengoptimumkan prestasi.

E -mel PHP Lanjutan: Headers & Ciri -ciri KustomE -mel PHP Lanjutan: Headers & Ciri -ciri KustomMay 09, 2025 am 12:13 AM

CustomheadersandadvancedfeaturesInphpeMailenhanceFunctialityandreliability.1) customHeadersAddmetadataFortrackingandCategorization.2) htmlemailsallowformattingIntivity.3)

Panduan untuk menghantar e -mel dengan PHP & SMTPPanduan untuk menghantar e -mel dengan PHP & SMTPMay 09, 2025 am 12:06 AM

Menghantar mel menggunakan PHP dan SMTP boleh dicapai melalui Perpustakaan PHPMailer. 1) Pasang dan konfigurasikan PHPMailer, 2) Tetapkan butiran pelayan SMTP, 3) Tentukan kandungan e -mel, 4) Hantar e -mel dan mengendalikan kesilapan. Gunakan kaedah ini untuk memastikan kebolehpercayaan dan keselamatan e -mel.

Apakah kaedah terbaik untuk menghantar e -mel menggunakan php?Apakah kaedah terbaik untuk menghantar e -mel menggunakan php?May 08, 2025 am 12:21 AM

Thebestapproachforsendingemailsinphpisusingthephpmaillibraryduetoitsreliability, featureRichness, andeaseofuse.phpmailersupportssmtp, proveddetaileDerrorHandling, membolehkanSendsendingHtmlandPlainteMails, supportsattachments, danStoVeShanCess

Amalan terbaik untuk suntikan ketergantungan dalam phpAmalan terbaik untuk suntikan ketergantungan dalam phpMay 08, 2025 am 12:21 AM

Alasan untuk menggunakan suntikan ketergantungan (DI) ialah ia menggalakkan gandingan longgar, kebolehlihatan, dan pemeliharaan kod. 1) Gunakan pembina untuk menyuntik kebergantungan, 2) Elakkan menggunakan pencari perkhidmatan, 3) Gunakan bekas suntikan ketergantungan untuk menguruskan kebergantungan, 4) meningkatkan kesesuaian melalui suntikan suntikan, 5) Elakkan kebergantungan over-suntikan, 6) Pertimbangkan kesan DI terhadap prestasi.

Petua Penalaan Prestasi PHPPetua Penalaan Prestasi PHPMay 08, 2025 am 12:20 AM

Phpperformancetuningiscrucialbecauseitenhancesspeedandeficiency, whoarevitalforwebapplications.1) cachingwithapcureSdatabaseloadandimprovesresponsetimes.2)

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

MinGW - GNU Minimalis untuk Windows

MinGW - GNU Minimalis untuk Windows

Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

mPDF

mPDF

mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini