【LeetCode】第125题——验证回文串(难度:简单)

【LeetCode】第125题——验证回文串(难度:简单)

  • 题目描述
  • 解题思路
  • 代码详解
  • 注意点

题目描述

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

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

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

  2. 示例 2:
    输入: “race a car”
    输出: false

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-palindrome
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

左右双指针,遇到非字母数字的继续移动,若有一处左右指针指向不同内容的便返回false,此题思路比较简单。

代码详解

class Solution {
     
    public boolean isPalindrome(String s) {
     
        int len = s.length();	// 获取字符串长度
        if (len == 0) {
     			// 特殊情况
            return true;
        }
        int l = 0;		// 左指针下标
        int r = len-1;	// 右指针下标
        while (l < r) {
     	// 退出循环条件
            char p = s.charAt(l);	// 获取左指针指向的内容
            char q = s.charAt(r);	// 获取右指针指向的内容
            if (p >= 65 && p <= 90) {
     	// A~Z转换成a~z
                p = (char)(p + 32);		// 不这样强转会报错
            } else if ((p >= 48 && p <= 57) || (p >= 97 && p <= 122)) {
      // 这行本来就是废话,只是为了引出下面的else。此处判断的是0~9和a~z
                p = p;
            } else {
     	// 其余的字符不算入判断,指针继续移动
                ++l;
                continue; // 这里的continue是我自认为很有必要加的,因为要及时更新指针指向的内容
            }
            // 右节点,同上
            if (q >= 65 && q <= 90) {
     
                q = (char)(q + 32);
            } else if ((q >= 48 && q <= 57) || (q >= 97 && q <= 122)) {
     
                q = q;
            } else {
     
                --r;
                continue;
            }
            // 运行至此处必为两数字/字母进行比较,再加上前面已进行大写字母转换成小写,因此不一样直接返回false
            if (p != q) {
     
                return false;
            } else {
      // 一样的话便继续移动指针,更新指针指向内容
                ++l;
                --r;
            }
        }
        return true;
    }
}

注意点

  • 注意在遍历到数字、字母之外的字符时及时更新指针指向的内容即可。

你可能感兴趣的:(LeetCode题解,leetcode,java,指针)