leetcode 125. 验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
输入: "race a car"
输出: false
让我们一起开启一个专题,刷刷高频面试题~
从字符串开始。
这道题题意很好理解,我就不过分解读了。我们用双指针的解法,直接代码招呼:
func isPalindrome(s string) bool {
// 如果字符串长度为 0 或者为 1,肯定为 true 咯
if len(s) <= 1 {return true}
// 双指针
low, hi := 0, len(s) - 1
for low < hi {
// 这里是判断当前指向的字符是否为数字或者字母
// 而且,low 和 hi 可以用 for 的语法进行修改~ 是一个很酷的减少代码量的技巧哦
for ; low < hi && !isValid(s[low]); low++ {}
for ; low < hi && !isValid(s[hi]); hi--{}
byteLow, byteHi := s[low], s[hi]
// 这里不用多说了,大写统一转成小写
if byteLow >= 'A' && byteLow <= 'Z' {byteLow = byteLow - 'A' + 'a'}
if byteHi >= 'A' && byteHi <= 'Z' {byteHi = byteHi - 'A' + 'a'}
// 碰到不满足的直接 return
if byteLow != byteHi {return false}
low, hi = low+1, hi-1
}
return true
}
func isValid(b byte) bool {return (b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z') || (b >= '0' && b <= '9')
}
由俭入奢易,由奢入俭难!做了很多题之后反过来看这样一道“简单”的题目,反而学到了很多东西。我们不能小看任何一道题,不能小看人生中任何一道坎,但是,最不能小看的,就是身边那些看似不起眼的人,相信我哦,我们都被金子包围着,所以,我们更要成为金子。
算法梦想家 ,来跟我一起玩算法,玩音乐,聊聊文学创作,咱们一起天马行空!