125. 验证回文串 题目概述 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 说明:本题中,我们将空字符串定义为有效的回文串。 示例 1: 输入: "A man, a plan, a canal: Panama" 输出: true 解释:"amanaplanacanalpanama" 是回文串 示例 2: 输入: "race a car" 输出: false 解释:"raceacar" 不是回文串 提示: 1 <= s.length <= 2 * 105 字符串 s 由 ASCII 字符组成 算法思路: 1. 双指针 设置指针left与right遍历字符串,跳出循环条件为左右指针相遇左指针从左开始遍历,右指针从右开始左指针判断该位置是否为数字或者字母如果是,则不进行任何操作如果不是,则自增,并且跳过一次循环右指针同理同时加入对左指针与右指针的判断判断两指针对应的字符是否相等相等则不进行操作不等则返回false循环遍历结束后返回true 代码实现: public boolean isPalindrome(String s) { int left = 0; int right = s.length() - 1; char[] chars = s.toLowerCase().toCharArray(); while(left < right){ if(!Character.isLetterOrDigit(chars[left])){ left++; continue; } if(!Character.isLetterOrDigit(chars[right])){ right--; continue; } if(chars[left] == chars[right]){ left++; right--; } else{ return false; } } return true; } 复杂度分析: 时间复杂度:O(n),n为字符串的长度空间复杂度:O(n),n为字符串的长度,因为要将字符串转化为字符数组