![0e26165be2ac236b3de435c68e0602f0.gif](https://i-blog.csdnimg.cn/blog_migrate/6e8847711763dd7cd68c98d6d3c18b3c.gif)
? 今日习题
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
![82990b19a5cbf1dae21dbb61259deee4.png](https://i-blog.csdnimg.cn/blog_migrate/6705c6b31a9e1012f6abc760e07cbc98.png)
……⏰ 思考时间……
如果你想好答案了
请查看解题思路和代码实现
▼
·解题思路·
先将字符串转为小写,从前面取一个字母或数字,再从后面取一个字母或数字(取到的不是字母或数字直接丢弃接着取),进行对比。如果不一致直接返回false,当字母+数字长度为双数时,回文串对比完会出现i > num;当字母+数字长度为单数时,回文串对比完会出现i==num,所以最后判断i>=num时说明是回文串直接返回true.
·代码实现·
func isPalindrome(s string) bool {
s = strings.ToLower(s)
n := len(s)
num := n-1for i := 0; i if (s[i] >= 'a' && s[i] <= 'z') || (s[i] >= '0' && s[i] <= '9'){if (s[num] >= 'a' && s[num] <= 'z') || (s[num] >= '0' && s[num] <= '9'){if s[i] != s[num]{return false
}
}else{//前面取到了字母或数字,但后面取到的不是。则接下来前面还是取当前的值,后面接着取
i--
}
num--
}if i >= num{return true
}
}return true
}
·算法分析·
时间复杂度:O(s),其中s是字符串得长度
空间复杂度:O(1)
微信关注“字节408考研”,
免费获取各院校计算机软件考研信息与专业课资料!
![2e7fe560ff79c9635fffbc7eb88eac2c.png](https://i-blog.csdnimg.cn/blog_migrate/cc47ccbba01bf4696e7099be0a0eec61.png)