go 程序员面试题

以下是一道Go程序员面试题的样例及详细回答:

题目:请编写一个函数,实现将一个字符串中的所有单词进行反转,例如输入"hello world",输出"olleh dlrow"。

解题思路:首先将字符串按照空格进行分割,得到一个字符串切片,然后遍历切片中的每个单词,将其反转后再拼接成一个新的字符串。

代码实现:

func reverseWords(s string) string {
    words := strings.Split(s, " ")
    for i, word := range words {
        words[i] = reverseString(word)
    }
    return strings.Join(words, " ")
}

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

解释:首先使用strings.Split函数将字符串按照空格进行分割,得到一个字符串切片words。然后遍历切片中的每个单词,使用reverseString函数将其反转,再将反转后的单词替换原来的单词。最后使用strings.Join函数将反转后的单词拼接成一个新的字符串并返回。

注意事项:在面试中,需要注意代码的可读性和健壮性,例如对于输入为空字符串或只包含空格的情况需要进行特判。同时也需要注意代码的效率和性能,例如可以使用strings.Builder来拼接字符串,避免频繁的字符串拼接操作。