leetcode125-验证回文串

原题

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

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

示例 1:

输入: "A man, a plan, a canal: Panama"
输出: true

示例 2:

输入: "race a car"
输出: false

解法

思想

双指针从两端相向而行进行比较吧,遇到非数字和非字母的字符就跳过。

代码

class Solution {
    public boolean isPalindrome(String s) {
        char[] chars = s.toCharArray();
        int prev = 0,next = chars.length-1;
        while(prev<next){
            while(prev!=chars.length-1&&!Character.isLetterOrDigit(chars[prev]))
                prev++;
            while(next!=0&&!Character.isLetterOrDigit(chars[next]))
                next--;     
            if(prev<next && Character.toLowerCase(chars[prev]) != Character.toLowerCase(chars[next])) return false;
            prev++;
            next--; 
        }
        return true;
    }
}
func isPalindrome(s string) bool {
    head := 0
    tail := len(s) - 1
    for head<tail{
        if !((s[head]>='a' && s[head] <= 'z') || (s[head]>='A' && s[head]<='Z') || (s[head]>='0' &&s[head]<='9')){
            head ++
            continue
        } 
        if !((s[tail]>='a' && s[tail] <= 'z') || (s[tail]>='A' && s[tail]<='Z') || (s[tail]>='0' &&s[tail]<='9')){
            tail --
            continue
        }
        headChar := s[head]
        if headChar>='a' && headChar<='z'{
            headChar -= byte('a' - 'A')
        }
        tailChar := s[tail]
        if tailChar>='a' && tailChar<='z'{
            tailChar -= byte('a'-'A')
        }
        if headChar!=tailChar{
            return false
        }
        head++
        tail--
    }
    return true
}

原创文章,作者:彭晨涛,如若转载,请注明出处:https://www.codetool.top/article/leetcode125-%e9%aa%8c%e8%af%81%e5%9b%9e%e6%96%87%e4%b8%b2/

(0)
彭晨涛彭晨涛管理者
上一篇 2020年5月20日
下一篇 2020年5月21日

相关推荐

  • leetcode205-同构字符串

    原题 给定两个字符串 s 和 t,判断它们是否是同构的。 如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。 所有出现的字符都必须用另一个字符替换,同时保留字符的顺…

    算法 2019年12月21日
    0210
  • 剑指offer59-队列的最大值

    原题(来源Leetcode) 请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的时间复杂度…

    算法 2020年3月7日
    0130
  • leetcode28-实现strStr()

    原题 实现 strStr() 函数。 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从…

    算法 2019年11月20日
    0110
  • leetcode145-二叉树的后序遍历

    原题 给定一个二叉树,返回它的 后序 遍历。 示例: 输入: [1,null,2,3]  1   \    2 &nbs…

    算法 2020年1月10日
    070
  • leetcode232-用栈实现队列

    原题 使用栈实现队列的下列操作: push(x) – 将一个元素放入队列的尾部。 pop() – 从队列首部移除元素。 peek() – 返回队列首部的元素。 empty() – …

    算法 2019年12月13日
    0550
  • leetcode25-K个一组翻转链表

    原题 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原…

    算法 2020年5月9日
    0540
  • leetcode733-图像渲染

    原题 有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间。 给你一个坐标 (sr, sc) 表示图像渲染开始的像素值(行 ,列)和一…

    2019年12月13日
    0100
  • leetcode40-组合总和II

    原题 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字…

    算法 2020年5月2日
    0730
  • 剑指offer47-礼物的最大价值

    原题(来源Leetcode) 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一…

    算法 2020年6月12日
    090
  • leetcode15-三数之和

    原题 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。 注意:…

    算法 2020年5月4日
    0180

发表回复

登录后才能评论