2021-10-12:验证回文串。给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串 。输入: “A man, a plan
2021-10-12:验证回文串。给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串 。输入: “A man, a plan, a canal: Panama”。输出: true。解释:“amanaplanacanalpanama” 是回文串。力扣125。
福大大 答案2021-10-12:
自然智慧即可。首尾指针比较,向中间移动。
 时间复杂度:O(N)。
 空间复杂度:O(1)。
代码用golang编写。代码如下:
package main
import "fmt"
func main() {
    ret := isPalindrome("abc ba")
    fmt.Println(ret)
}
// 忽略空格、忽略大小写 -> 是不是回文
// 数字不在忽略大小写的范围内
func isPalindrome(s string) bool {
    if len(s) == 0 {
        return true
    }
    str := []byte(s)
    L := 0
    R := len(str) - 1
    for L < R {
        // 英文(大小写) + 数字
        if validChar(str[L]) && validChar(str[R]) {
            if !equal(str[L], str[R]) {
                return false
            }
            L++
            R--
        } else {
            L += twoSelectOne(validChar(str[L]), 0, 1)
            R -= twoSelectOne(validChar(str[R]), 0, 1)
        }
    }
    return true
}
func validChar(c byte) bool {
    return isLetter(c) || isNumber(c)
}
func equal(c1 byte, c2 byte) bool {
    if isNumber(c1) || isNumber(c2) {
        return c1 == c2
    }
    // a  A   32
    // b  B   32
    // c  C   32
    return (c1 == c2) || (getMax(c1, c2)-getMin(c1, c2) == 32)
}
func isLetter(c byte) bool {
    return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')
}
func isNumber(c byte) bool {
    return (c >= '0' && c <= '9')
}
func getMax(a byte, b byte) byte {
    if a > b {
        return a
    } else {
        return b
    }
}
func getMin(a byte, b byte) byte {
    if a > b {
        return a
    } else {
        return b
    }
}
func twoSelectOne(c bool, a int, b int) int {
    if c {
        return a
    } else {
        return b
    }
}
执行结果如下:
 
2021-10-12:验证回文串。给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串 。输入: “A man, a plan的更多相关文章
- sql中null 和 ‘’(空字符串)
		sql 中 null 和 空字符串的区别方式 在Silverlight中 数据库 需要与实体类进行映射, 假如实体类不允许为null,则 select '' as 列名 from 表名字: ... 
- Django与SQL语言中——NULL与空字符串的区别
		SQL有指定空值的独特方式,它把空值叫做NULL. Null在数据库中表示 不知道的数据,主要有3种意思: 1)知道数据存在,但不知道具体值. 2)不知道数据是否存在. 3)数据不存在. 在SQL中, ... 
- Oracle中Null与空字符串' '的区别
		含义解释: 问:什么是NULL? 答:在我们不知道具体有什么数据的时候,也即未知,可以用NULL,我们称它为空,ORACLE中,含有空值的表列长度为零. ORACLE允许任何一种数据类型的字段为空,除 ... 
- MySQL中NULL与空字符串
		一些刚刚接触MySQL的孩子,经常会错误的认为NULL与空字符串’ ’是相同的.这看似是一件不重要的事情,但是在MySQL中,这两者是完全不同的.NULL是指没有值,而”则表示值是存在的,只不过是个 ... 
- springboot中返回值json中null转换空字符串
		在实际项目中,我们难免会遇到一些无值.当我们转JSON时,不希望这些null出现,比如我们期望所有的null在转JSON时都变成“”“”这种空字符串,那怎么做呢? Jackson中对null的处理 @ ... 
- 关于JavaScript中0、空字符串、'0'是true还是false的总结
		最近被问到关于js中空字符串是true还是false得问题,一时间没想起来,现在在chrome的console面板上输出代码测试一下. "" == false 结果是true ... 
- Noip模拟75 2021.10.12
		T1 如何优雅的送分 他说是送分题,我就刚,没刚出来,想到莫比乌斯容斥后就都没推出来 好吧还是不能被恶心的题目,挑衅的语言打乱做题节奏 于是这一场也就没了.... $F(i)$表示$i$的不同质因子集 ... 
- 2021.10.12考试总结[NOIP模拟75]
		T1 如何优雅的送分 考虑式子的实际意义.\(2^{f_n}\)实际上就是枚举\(n\)质因子的子集.令\(k\)为这个子集中数的乘积,就可以将式子转化为枚举\(k\),计算\(k\)的贡献. 不难得 ... 
- 日常Java 2021/10/12
		封装 在面向对象程式设计方法中,封装是指-种将抽象性函式接口的实现细节部分包装.隐藏起来的方法 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问 要访问该类的代码和数据,必 ... 
- Java初步学习——2021.10.12每日总结,第六周周二
		(1)今天做了什么: (2)明天准备做什么? (3)遇到的问题,如何解决? 今天学习了菜鸟教程Java实例,数组 1.数组的排序和元素的查找--sort和binarySearch方法 import j ... 
随机推荐
- OO多项式求导作业总结
			一.程序分析 1.1第一次作业 第一次作业是简单的多项式求导,甚至没有括号嵌套.但是,就是这个在如今看来如此简单的作业,由于俺寒假过于起飞,pre没做,正则表达式也不会(属实拉跨),一度想用c语言字符 ... 
- Drf_序列化and反序列化基础
			序列化类 from rest_framework import serializers class BookSerializer(serializers.Serializer): # 要序列化的字段 ... 
- Python基础教程:字典
			字典 = {'键1':'值1','键2':'值2','键3':'值3',...} animal_dict = {'Cow':'Milk','Chicken':'egg'} 字典由键值对构成,这种键值对 ... 
- Python库之os库和logging库的基本使用说明
			使用os库操作目录及文件 使用os.sep() 方法获取系统分隔符 print(os.sep) 使用os.name()方法获取操作系统的平台类型 print(os.name) 使用os.getcwd( ... 
- cmd查看对应端口使用情况
			cmd查看端口号netstat -ano | findstr 80 
- 在wxpython框架写的GUI中调用GIF格式图片,显示在指定行列的方法
			#首先需要从 wx.adv 模块导入 Animation, AnimationCtrl方法 from wx.adv import Animation, AnimationCtrl #然后在面板实现过程 ... 
- 最新 umi4-max 如何使用 webpack5 联邦模块
			新项目用 umi4-max 搭建,部分功能想要使用其他项目的功能,不想重新开发,想到了使用 webpack5 的联邦模块,可以直接引用其他项目代码来实现共享代码. 理想很美好,现实很残酷.直接按照 w ... 
- RHCE服务---Web
			网站需求:请给openlab搭建web网站 1.基于域名www.openlab.com可以访问网站内容为 welcome to openlab!!! 2.给该公司创建三个子界面分别显示学生信息,教学资 ... 
- Python的安装与配置(图文教程)
			安装Python 想要进行Python开发,首先需要下载和配置Python解释器. 下载Python 访问Python官网: https://www.python.org/ 点击downloads按钮 ... 
- C/C++编译构建相关问题
			名词辨析 GNU GNU's Not Unix!的递归缩写 一个自由的操作系统,起源于GNU计划,希望发展出一套完整的开放源代码操作系统来取代Unix 基本组成包括: GNU编译器套装(GCC) GN ... 
