以下是一道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来拼接字符串,避免频繁的字符串拼接操作。