125.回文字符串-双指针(易)

链接:https://leetcode-cn.com/problems/valid-palindrome


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

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

示例 1:

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

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

思路:

使用two-pointer思想, 直接上代码.

注意点:

  1. 大写字母+32=小写字母
  2. p1要++, 而p2要--

    代码:

    class Solution {
     public boolean isAlphanumeric(char c) {
         return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9');
     }
     // 忽略大小写的情况下, 判断是否相同
     public boolean isEqualIgnoreCase(char a, char b) {
         if (a >= 'A' && a <= 'Z') a += 32;
         if (b >= 'A' && b <= 'Z') b += 32;
         return a == b;
     }
     public boolean isPalindrome(String s) {
         if (s == null || s.length() == 0) return true;
         int p1 = 0, p2 = s.length()-1;
         while (p1 < p2) {
             // 直到遇到第一个字母/数字
             while (p1 < p2 && !isAlphanumeric(s.charAt(p1))) {
                 p1++;
             }
             while (p1 < p2 && !isAlphanumeric(s.charAt(p2))) {
                 p2--;
             }
             if (p1 < p2 && !isEqualIgnoreCase(s.charAt(p1), s.charAt(p2))) {
                 return false;
             }
             p1++;
             p2--;
         }
         return true;
     }
    }
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务