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日

相关推荐

  • leetcode17-电话号码的字母组合

    原题 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例: 输入: "23" 输出: …

    2020年5月3日
    0130
  • leetcode912-排序数组

    原题 给定一个整数数组 nums,将该数组升序排列。 示例 1: 输入: [5,2,3,1] 输出: [1,2,3,5] 示例 2: 输入: [5,1,1,2,0,0] 输出: […

    算法 2020年3月31日
    0350
  • leetcode85-最大矩形

    原题 给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。 示例: 输入: [   ["1","0","1","0","0"…

    2020年1月24日
    0200
  • leetcode242-有效的字母异位词

    原题 https://leetcode.cn/problems/valid-anagram/description/ 解法 (针对进阶场景,若字符串中存在unicode字符) fu…

    算法 2024年3月26日
    040
  • 剑指offer35-复杂链表的复制

    原题(来源Leetcode) 请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random …

    2020年6月13日
    0110
  • leetcode21-合并两个有序链表

    原题 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入: 1->2->4, 1->3->4 输出: 1->1->2->3-…

    2019年12月17日
    0100
  • leetcode16-最接近的三数之和

    原题 给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存…

    算法 2020年5月4日
    080
  • leetcode503-下一个更大元素II

    原题 给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,…

    算法 2020年2月1日
    0100
  • leetcode373-查找和最小的K对数字

    原题 给定两个以升序排列的整形数组 nums1 和 nums2, 以及一个整数 k。 定义一对值 (u,v),其中第一个元素来自 nums1,第二个元素来自 nums2。 找到和最…

    算法 2020年2月13日
    0160
  • leetcode36-有效的数独

    原题 判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-…

    2019年12月26日
    090

发表回复

登录后才能评论