125.回文字符串-双指针(易)
链接:https://leetcode-cn.com/problems/valid-palindrome
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
思路:
使用two-pointer思想, 直接上代码.
注意点:
- 大写字母+32=小写字母
- 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; } }