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

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

    示例 1:

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

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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/valid-palindrome

    思路:
    注意题目要求:只考虑字母和数字字符,可以忽略字母的大小写,则设双指针分别指向起始和结尾,扫描一遍即可。
    复杂度分析:
    时间复杂度O(n) n为字符串长度
    空间复杂度O(1)

    1. var isPalindrome = function(s) {
    2. let n = s.length;
    3. let left = 0,right =n-1;
    4. const check = (char)=>{
    5. return (char>='a'&&char <= 'z')||(char>='A'&&char <= 'Z') ||(char >='0'&&char<='9')
    6. }
    7. while (left < right) {
    8. while (left < right && !check(s[left])) {
    9. ++left;
    10. }
    11. while (left < right && !check(s[right])) {
    12. --right;
    13. }
    14. if (left < right) {
    15. if (s[left].toLocaleLowerCase() !== s[right].toLocaleLowerCase()) {
    16. return false;
    17. }
    18. ++left;
    19. --right;
    20. }
    21. }
    22. return true;
    23. };