一. 问题描述
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
二. 解题思路
本题思路:采用双指针进行求解。
步骤一:将字符串中的大写字母全部转换成小写字母得到ss。
步骤二:创建两个指针一个指向ss的头部,一个指向ss的尾部。
步骤三:双指针遍历ss字符串。当遇到非字母或数字则跳过,否则进行比较两个指针指向的数值,若相同,first++,last--。否则返回false。
步骤四:遍历完ss后,则返回true。
三. 执行结果
执行用时 :7 ms, 在所有 java 提交中击败了65.41%的用户
内存消耗 :37.9 MB, 在所有 java 提交中击败了86.62%的用户
四. Java代码
class Solution { public boolean isPalindrome(String s) { String ss=s.toLowerCase(); int first=0; int last=ss.length()-1; while(first<last) { if((ss.charAt(first)>='0'&&ss.charAt(first)<='9')||(ss.charAt(first)>='a'&&ss.charAt(first)<='z')){ if((ss.charAt(last)>='0'&&ss.charAt(last)<='9')||(ss.charAt(last)>='a'&&ss.charAt(last)<='z')) { if(ss.charAt(first)==ss.charAt(last)) { first++; last--; }else { return false; } }else { last--; continue; } }else { first++; continue; } } return true; } }