偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

經(jīng)典面試題:Go 字符串面試清單

開發(fā) 后端
相比 Java 或 Python,Go 的字符串模型更為簡(jiǎn)潔,但需特別注意不可變性與 UTF-8 編碼。

本文概述 Go 語言中的字符串特性、常用操作以及面試高頻題型,幫助您在刷題、面試或調(diào)試生產(chǎn)代碼時(shí)迅速查閱。Go 字符串具備以下特征: 不可變、支持 UTF-8 編碼、底層由字節(jié)切片([]byte)實(shí)現(xiàn)。

一、基礎(chǔ)語法與常用操作

1. 聲明字符串

var s string = "hello"
s2 := "world"

2. 字符串不可變

嘗試直接修改字符會(huì)導(dǎo)致編譯錯(cuò)誤:

s := "hello"
// s[0] = 'H' // ? 編譯錯(cuò)誤

3. 通過 []rune 修改字符

r := []rune(s)
r[0] = 'H'
s = string(r) // "Hello"

4. 字符串長度

len 返回字節(jié)長度而非字符數(shù)量:

len(s) // 字節(jié)數(shù)

5. 字符串拼接

s1 := "go"
s2 := "lang"
s3 := s1 + s2 // "golang"

6. 按字符遍歷字符串

推薦方式,能正確處理 Unicode 與表情符號(hào)。

for _, ch := range s {
    fmt.Printf("%c ", ch)
}

7. 字符串與 []byte 互轉(zhuǎn)

b := []byte("hello")
s := string(b)

8. 字符串比較

if s1 == s2 {
    fmt.Println("Equal")
}

9. strings 包常用函數(shù)

import "strings"

strings.ToLower("Go")             // "go"
strings.ToUpper("go")             // "GO"
strings.Contains("hello", "ll")   // true
strings.HasPrefix("hello", "he")  // true
strings.HasSuffix("hello", "lo")  // true
strings.Split("a,b,c", ",")       // []string{"a", "b", "c"}
strings.Join([]string{"a", "b"}, "-") // "a-b"
strings.ReplaceAll("foo bar foo", "foo", "baz") // "baz bar baz"

10. 去除空白

strings.TrimSpace("  hello  ") // "hello"

二、高頻字符串算法題

1. 反轉(zhuǎn)字符串

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

2. 判斷字母異位詞

func isAnagram(s, t string) bool {
    if len(s) != len(t) {
        return false
    }
    freq := [26]int{}
    for i := 0; i < len(s); i++ {
        freq[s[i]-'a']++
        freq[t[i]-'a']--
    }
    for _, v := range freq {
        if v != 0 {
            return false
        }
    }
    return true
}

3. 無重復(fù)字符的最長子串

func lengthOfLongestSubstring(s string) int {
    m := make(map[byte]int)
    left, maxLen := 0, 0
    for right := 0; right < len(s); right++ {
        if idx, ok := m[s[right]]; ok && idx >= left {
            left = idx + 1
        }
        m[s[right]] = right
        if maxLen < right-left+1 {
            maxLen = right - left + 1
        }
    }
    return maxLen
}

4. 回文字符串檢測(cè)

func isPalindrome(s string) bool {
    l, r := 0, len(s)-1
    for l < r {
        if s[l] != s[r] {
            return false
        }
        l++
        r--
    }
    return true
}

5. 分組字母異位詞

func groupAnagrams(strs []string) [][]string {
    m := make(map[[26]int][]string)
    for _, s := range strs {
        var cnt [26]int
        for _, ch := range s {
            cnt[ch-'a']++
        }
        m[cnt] = append(m[cnt], s)
    }
    res := make([][]string, 0, len(m))
    for _, group := range m {
        res = append(res, group)
    }
    return res
}

6. 最長回文子串(中心擴(kuò)展法)

func longestPalindrome(s string) string {
    start, end := 0, 0
    for i := 0; i < len(s); i++ {
        l1, r1 := expand(s, i, i)     // 奇數(shù)長度
        l2, r2 := expand(s, i, i+1)   // 偶數(shù)長度
        if r1-l1 > end-start {
            start, end = l1, r1
        }
        if r2-l2 > end-start {
            start, end = l2, r2
        }
    }
    return s[start : end+1]
}

func expand(s string, l, r int) (int, int) {
    for l >= 0 && r < len(s) && s[l] == s[r] {
        l--
        r++
    }
    return l + 1, r - 1
}

7. 報(bào)數(shù)(Count and Say)

func countAndSay(n int) string {
    if n == 1 {
        return "1"
    }
    prev := countAndSay(n - 1)
    result, count := "", 1
    for i := 1; i < len(prev); i++ {
        if prev[i] == prev[i-1] {
            count++
        } else {
            result += fmt.Sprintf("%d%c", count, prev[i-1])
            count = 1
        }
    }
    result += fmt.Sprintf("%d%c", count, prev[len(prev)-1])
    return result
}

三、Unicode 與 UTF-8

Go 字符串默認(rèn)采用 UTF-8 編碼。處理多字節(jié)字符或表情符號(hào)時(shí),應(yīng)轉(zhuǎn)換為 []rune 或使用 utf8 包:

s := "??????"
fmt.Println(len(s))                      // 字節(jié)數(shù)
fmt.Println(utf8.RuneCountInString(s))   // 實(shí)際字符數(shù)

四、結(jié)論

相比 Java 或 Python,Go 的字符串模型更為簡(jiǎn)潔,但需特別注意不可變性與 UTF-8 編碼。熟練掌握轉(zhuǎn)換、遍歷及內(nèi)存友好的操作模式,將幫助您高效解決與字符串相關(guān)的面試問題。

責(zé)任編輯:趙寧寧 來源: 令飛編程
相關(guān)推薦

2014-07-28 14:00:40

linux面試題

2023-07-14 08:12:21

計(jì)時(shí)器unsafecontext

2023-10-20 15:58:27

Python刪除指定字符

2025-05-27 08:10:00

Go數(shù)組Map

2016-03-03 10:07:39

ios內(nèi)存管理面試總結(jié)

2024-04-15 08:34:43

2024-04-28 08:23:18

2020-06-04 14:40:40

面試題Vue前端

2024-07-24 08:38:07

2016-05-05 17:45:43

Spring面試題答案

2023-11-13 07:37:36

JS面試題線程

2011-03-24 13:27:37

SQL

2010-04-15 11:54:55

面試

2015-08-19 09:35:49

Java main面試題

2025-06-18 09:01:27

Linux系統(tǒng)啟動(dòng)系統(tǒng)

2021-06-27 22:48:28

Redis數(shù)據(jù)庫內(nèi)存

2013-05-29 10:36:08

Android開發(fā)移動(dòng)開發(fā)字符串反轉(zhuǎn)

2025-02-26 07:58:41

2009-06-06 18:34:05

java面試題

2009-06-06 18:36:02

java面試題
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)