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

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

屏幕截图 2022-11-12 195143.png

什么是回文?


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


回文的经典案例


上海自来水来自海上


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


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


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


撸代码


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


判断字符串中汉字的数量


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。


微信图片_20221112195539.jpg

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


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]

微信图片_20221112195543.jpg


回文判断


  1. 字符串从左往右读和从右往左读是一样的 就是回文
  2. 因为是中文 所以要用rune类型  字符串转成切片 for循环判断 如果正数N和倒数N是一致的,就是回文,否则就不是回文。


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 + ":是回文")
}


运行结果


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


微信图片_20221112195546.jpg


微信图片_20221112195549.jpg

相关文章
|
3月前
|
缓存 前端开发 中间件
[go 面试] 前端请求到后端API的中间件流程解析
[go 面试] 前端请求到后端API的中间件流程解析
|
3月前
|
算法 Go
[go 面试] 雪花算法与分布式ID生成
[go 面试] 雪花算法与分布式ID生成
|
3月前
|
Go 调度 开发者
[go 面试] 深入理解进程、线程和协程的概念及区别
[go 面试] 深入理解进程、线程和协程的概念及区别
|
3月前
|
并行计算 数据挖掘 大数据
[go 面试] 并行与并发的区别及应用场景解析
[go 面试] 并行与并发的区别及应用场景解析
|
2月前
|
算法 程序员 Go
PHP 程序员学会了 Go 语言就能唬住面试官吗?
【9月更文挑战第8天】学会Go语言可提升PHP程序员的面试印象,但不足以 solely “唬住” 面试官。学习新语言能展现学习能力、拓宽技术视野,并增加就业机会。然而,实际项目经验、深入理解语言特性和综合能力更为关键。全面展示这些方面才能真正提升面试成功率。
56 10
|
3月前
|
存储 负载均衡 算法
[go 面试] 一致性哈希:数据分片与负载均衡的黄金法则
[go 面试] 一致性哈希:数据分片与负载均衡的黄金法则
|
3月前
|
运维 监控 容灾
[go 面试] 实现服务高可用的策略和实践
[go 面试] 实现服务高可用的策略和实践
|
3月前
|
Go API 数据库
[go 面试] 分布式事务框架选择与实践
[go 面试] 分布式事务框架选择与实践
|
3月前
|
安全 Go 调度
[go 面试] 深入理解并发控制:掌握锁的精髓
[go 面试] 深入理解并发控制:掌握锁的精髓
|
3月前
|
SQL 安全 测试技术
[go 面试] 接口测试的方法与技巧
[go 面试] 接口测试的方法与技巧
下一篇
无影云桌面