Skip to content

Go好玩的面试题之回文判断

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第11天,点击查看活动详情

今天为大家分享Go好玩的面试题之回文判断。为了让大家更好的理解会先分享一下如何使用go判断汉字数量、单词出现次数。

什么是回文?

回文,汉语词语,指汉语中的_回文_语法,即把相同的词汇或句子,在下文中调换位置或颠倒过来,产生首尾回环的情况,叫做_回文_,也叫回环。

回文的经典案例

上海自来水来自海上

我们如何使用go语言实现回文判断呢?

我们来简单分析一下涉及到的知识点:

  1. 判断字符串中汉字的数量,难点是一个字符是不是汉字
  2. 回文判断:字符串从左往右读和从右往左读是一样的 就是回文
  3. 在go语言中中文要用rune类型
  4. 判断回文的基本思路是:字符串转成切片 for循环判断 如果正数N和倒数N是一致的,就是回文,否则就不是回文。

撸代码

为了方便大家更好的理解,在实现回文判断之前,先分享判断汉字数量、单词出现次数的方法。

判断字符串中汉字的数量

go
package main import (    "fmt"    "unicode" )
func main() {
// 判断字符串中汉字的数量
// 难点是一个字符是不是汉字
s1 := "hello掘金hah你好哇"
// 1. 依次拿到字符串中的字符
// 2.判断当前这个字符是不是汉字
// 3.把汉字出现的次数累加 获得总数
var sum = 0
for _, c := range s1 {
if unicode.Is(unicode.Han, c) {          sum++
}
}    fmt.Println(sum)
}

运行结果

和我们预期的一样,汉字数量为5。

image.png

统计 what do you do 每个单词出现的次数

go
package main import (    "fmt"    "strings" )
func main() {    s2 := "what do you do"    s3 := strings.Split(s2, " ")
//定义一个map 单词存储为map的key
m := make(map[string]int, 10)
for _, v := range s3 {
if _, ok := m[v];
ok {          m[v]++
} else {          m[v] = 1
}
}    fmt.Println(m)
}

运行结果

map[do:2 what:1 you:1]

image.png

回文判断

  1. 字符串从左往右读和从右往左读是一样的 就是回文
  2. 因为是中文 所以要用rune类型 字符串转成切片 for循环判断 如果正数N和倒数N是一致的,就是回文,否则就不是回文。
go
package main import (    "fmt" )
func main() {    s4 := "上海自来水来自海上"    r := make([]rune, 0, len(s4))
for _, v := range s4 {       r = append(r, v)
}    fmt.Println(len(r))
for i := 0;
i < len(r)/2;
i++ {
if r[i] != r[len(r)-1-i] {          fmt.Println(s4 + ":不是回文")
}
}    fmt.Println(s4 + ":是回文")
}

运行结果

我们分别输入:上海自来水来自海上、上海自来水来自海上吗 来验证回文判断

image.png

image.png

最后

感谢阅读,欢迎大家三连:点赞、收藏、投币(关注)!!!

8e95dac1fd0b2b1ff51c08757667c47a.gif

AI 应用开发训练营 · 现在开始

别只收藏 AI 文章,今天就做出第一个能上线的项目

文章解决认知,项目才证明能力。把 Agent、RAG、MCP 变成可运行、可展示、可面试表达的成果,现在就从一次岗位准备度自测开始。

立即开始 AI 岗位准备度自测 查看训练营路线
真实学员成果先看成果,再决定是否开始 →
  1. 01选方向
  2. 02做项目
  3. 03出成果
  4. 04拿面试