Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara melakukan pembalikan rentetan menggunakan Golang

Cara melakukan pembalikan rentetan menggunakan Golang

PHPz
PHPzasal
2023-04-14 11:21:321585semak imbas

Dalam pembangunan program Golang, rentetan ialah jenis data yang sangat biasa. Mereka ada di mana-mana, sama ada anda membaca kandungan daripada rangkaian atau membaca teks daripada fail, rentetan hampir selalu terlibat. Pembalikan rentetan juga merupakan masalah yang sering perlu ditangani. Artikel ini akan meneroka cara menggunakan Golang untuk pembalikan rentetan.

1. Asas pembalikan rentetan

Dalam Golang, rentetan terdiri daripada satu atau lebih aksara dan setiap aksara diwakili oleh titik kod Unikod. Rentetan dalam Golang tidak boleh diubah, yang bermaksud bahawa apabila anda cuba mengubah suai aksara dalam rentetan, anda sebenarnya mencipta rentetan baharu dan bukannya menukar rentetan asal. Pembalikan rentetan tidak terkecuali, dan rentetan baharu perlu dibuat untuk menyimpan hasil terbalik.

Kod pembalikan rentetan asas adalah seperti berikut:

func ReverseString(s string) string {
    r := []rune(s)
    for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {
        r[i], r[j] = r[j], r[i]
    }
    return string(r)
}

Kod di atas menukar rentetan menjadi kepingan rune dengan menggunakan jenis []rune supaya aksara dalam rentetan itu boleh diakses secara langsung. Gunakan penunjuk berganda (i dan j) untuk mengulangi aksara, menukar aksara ke-i ke kedudukan ke-j.

2. Pembalikan rentetan lanjutan

Kod di atas melaksanakan pembalikan rentetan asas, tetapi ia tidak cukup cekap dalam sesetengah kes. Oleh kerana pembalikan rentetan mencipta rentetan baharu, mencipta dan mengisi rentetan baharu mungkin mengambil lebih banyak masa daripada membalikkan aksara secara terus.

Pembalikan rentetan lanjutan boleh dioptimumkan dengan menggunakan tatasusunan bait. Panjang tatasusunan bait adalah sama dengan panjang rentetan asal, dan boleh diterbalikkan terus dalam tatasusunan bait asal, mengelakkan kos masa dan ruang untuk mencipta rentetan baharu. Apabila melakukan pembalikan rentetan, rentetan itu perlu ditukar kepada tatasusunan bait, tetapi memandangkan rentetan dalam Go boleh mengandungi jujukan bait berbilang, pengekodan perlu ditentukan sebelum penukaran. Contoh berikut menunjukkan cara untuk membalikkan rentetan UTF-8:

func ReverseString(s string) string {
    b := []byte(s)
    n := len(b)
    for i := 0; i < n/2; i++ {
        b[i], b[n-i-1] = b[n-i-1], b[i]
    }
    return string(b)
}

di mana jenis []byte digunakan untuk menukar rentetan kepada tatasusunan bait. Gunakan penunjuk berganda (i dan n-i-1) untuk mengulangi tatasusunan bait, menukar bait ke-i ke kedudukan n-i-1.

3. Ujian penanda aras

Untuk mengukur prestasi dua kaedah pembalikan rentetan yang berbeza, berikut akan menjalankan ujian penanda aras:

func BenchmarkReverseString(b *testing.B) {
    s := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
    for i := 0; i < b.N; i++ {
        ReverseString(s)
    }
}

func BenchmarkReverseString2(b *testing.B) {
    s := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
    for i := 0; i < b.N; i++ {
        ReverseString2(s)
    }
}

Dalam pembangunan program Golang , Ujian penanda aras ialah cara penting untuk menguji prestasi Satu siri fungsi ujian disediakan dalam pakej testing untuk kami gunakan. Dua fungsi, ReverseString dan ReverseString2, digunakan di sini untuk menanda aras pembalikan rentetan UTF-8. Rentetan ujian ialah rentetan 26 huruf kecil dan 26 huruf besar.

Selepas melaksanakan penanda aras dan membandingkan keputusan:

go test -bench=.

BenchmarkReverseString-8     3509301               331 ns/op
BenchmarkReverseString2-8    45815326                25.2 ns/op

Keputusan menunjukkan bahawa menggunakan tatasusunan bait untuk pembalikan rentetan adalah jauh lebih baik daripada menggunakan hirisan rune untuk kaedah pembalikan rentetan adalah lebih cekap.

4. Ringkasan

Dalam artikel ini, kami memperkenalkan dua kaedah pembalikan rentetan dalam Golang, satu menggunakan penghirisan rune dan satu lagi menggunakan perkataan Array of sections. Kami juga menyediakan kod penanda aras yang pendek tetapi boleh dilaksanakan untuk mengukur prestasi kedua-dua kaedah. Jika rentetan yang perlu diproses adalah lebih kecil, maka kita boleh membalikkan rentetan menggunakan kaedah asas. Walau bagaimanapun, untuk rentetan yang lebih panjang atau apabila operasi songsang yang cekap diperlukan, kita harus membalikkan rentetan menggunakan kaedah berasaskan tatasusunan bait lanjutan.

Atas ialah kandungan terperinci Cara melakukan pembalikan rentetan menggunakan Golang. 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
Artikel sebelumnya:Terokai set kaedah GolangArtikel seterusnya:Terokai set kaedah Golang