125. 验证回文串

125. 验证回文串

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

说明:本题中,我们将空字符串定义为有效的回文串。

示例 1:

输入: “A man, a plan, a canal: Panama”
输出: true
示例 2:

输入: “race a car”
输出: false

  • 分析
    首先要过滤出数字和字母,然后进行回文判断
    方法1,是直接过滤掉非数字和字母的,然后回文判断,见code1。
    方法2,是将数字、大小写字母存到map[byte]int中,数字对应的数字字符对应的ASCII,字母对应的小写字母的ASCII,回文判断,若不是合法字符,即map中不存在该数据,则获取下一个字母,若都是合法字符,则判断二者的对应的ASCII是否相等,直到结束,见code2。
    方法3,添加了一合法字符判断的辅助函数,并返回对应的ASCII码,大写字母的返回小写字母的ASCII码,不合法的返回-1,回文比较,不是合法,直接获取下一个,若都是合法,则直接判断是否相等,不等返回false结束,若相等,则继续,知道i>=j,见code3。

  • code3

func isAlph(b byte)int{
	if b>='A'&&b<='Z'||b>='0'&&b<='9'{
		return int(b)
	}else if b>='a'&&b<='z'{
		return int(b)-32
	}
	return -1
}
func isPalindrome(s string) bool {
	i,j:=0,len(s)-1
	for i<j{
		a:=isAlph(s[i])
		if a==-1{
			i++;continue
		}
		b:=isAlph(s[j])
		if b==-1{
			j--;continue
		}
		if a==b{
			i++;j--
		}else{
			return false
		}
	}
	return true
}
  • code2
func isPalindrome(s string) bool {
	mp:=make(map[int]int)
	for i:=0;i<26;i++{
		mp[int('a')+i]='a'+i;mp[int('A')+i]='a'+i//将字母都存为小写字母
	}
	for i:=0;i<10;i++{
		mp[int('0')+i]='0'+i
	}
	i:=0;j:=len(s)-1
	for i<j{
		a,b,ok:=0,0,true
		if a,ok=mp[int(s[i])];ok==false{
			i++;continue
		}
		if b,ok=mp[int(s[j])];ok==false{
			j--;continue
		}
		if a!=b{
			return false
		}
		i++;j--
	}
	return true
}
  • code1
func isPalindrome(s string) bool {
    ss:=make([]int,0);a:='a';A:='A'
    mp:=make(map[int]bool)
    for i:=0;i<26;i++{
        mp[int(a)+i]=true;mp[int(A)+i]=true
    }
    for i:=0;i<10;i++{
        mp[int('0')+i]=true
    }
    for i:=0;i<len(s);i++{
        if _,ok:=mp[int(s[i])];ok{
            if s[i]>='A'&&s[i]<='Z'{
                ss=append(ss,int(s[i])+32)
            }else{
                ss=append(ss,int(s[i]))
            }
        }
    }
    i:=0;j:=len(ss)-1
    for i<j{
        if ss[i]!=ss[j]{
            return false
        }
        i++;j--
    }
    return true
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值