[面试常问总结] 4. 验证回文串

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:

 

 示例 2:

 

思路1:

1、首先将字符串s转换为小写,然后定义一个列表,其中只保存字母和数字。
2、判断 反转后的列表是否和原列表相等

 

复制代码
//判断是否是回文字符串,通过反转字符串方式,例如:IsPalindrome1("hEle,h") 返回true
func IsPalindrome1(str string) bool {
    //全部转成小写
    str = strings.ToLower(str)
    strByte := []rune(str)
    var newStrByte []rune
    //去除标点符合
    for _, l := range strByte {
        if unicode.IsPunct(l) {
            continue
        }
        newStrByte = append(newStrByte, l)
    }
    //反转字符串后,看看是否原字符串一致
    if ReverseString(string(newStrByte)) == string(newStrByte) {
        return true
    }
    return false
}
复制代码
复制代码
//反转字符串
//双指针法 例如:ReverseString("hello") 返回olleh ;ReverseString("helo") 返回oleh
func ReverseString(str string) string {
    strByte := []rune(str)
    num := len(strByte)
    if num == 0 {
        return ""
    }
    //双指针
    //找到中间位置
    mid := num / 2
    //最后一个元素
    j := num - 1
    //循环到中间位置
    for i := 0; i < mid; i++ {
        //多重赋值,左右两边元素交换
        strByte[i], strByte[j] = strByte[j], strByte[i]
        //右边指针往左移动
        j--
    }
    return string(strByte)
}
复制代码

思路2:

通过左右指针法 , 左边和右边进行相等比较 , 当前去除掉标点符号

复制代码
//判断是否是回文字符串
//双指针法 通过左右指针,例如:IsPalindrome2("hEle,h") 返回true
func IsPalindrome2(str string) bool {
    //全部转成小写
    str = strings.ToLower(str)
    strByte := []rune(str)
    //定义左右指针
    left := 0
    right := len(strByte) - 1
    for left < right {
        //跳过标点
        if unicode.IsPunct(strByte[left]) {
            left++
        }
        if unicode.IsPunct(strByte[right]) {
            right--
        }
        if strByte[left] != strByte[right] {
            return false
        }
        left++
        right--
    }
    return true
}
复制代码

 

posted @   唯一客服系统开发笔记  阅读(60)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2020-05-18 [Go] golang http下返回json数据
2016-05-18 [javaSE] 类型转换(1加1等于几)
2016-05-18 [javaSE] 变量的传值与传址
2016-05-18 [PHP] Yaf框架的简单安装使用
2016-05-18 [PHP] 链表数据结构(单链表)
点击右上角即可分享
微信分享提示
1
chat with us