LeetCode算法学习之验证回文串
完整代码实现
class Solution {public boolean isPalindrome(String s) {s = s.replaceAll("[^a-zA-Z0-9]", "").toLowerCase();char[] ch = s.toCharArray();int left = 0;int right = ch.length -1;while(left < right){if(ch[left] == ch[right]){left++;right--;}else{return false;}}return true;}
}解题思路:
预处理字符串
去除非字母数字字符:使用正则表达式 [^a-zA-Z0-9] 移除所有非字母数字的字符
统一大小写:将字符串转换为全小写(或全大写),避免大小写干扰比较
算法选择
选择双指针法,通过从字符串的两端向中间逐步比较字符:
初始化指针:
left 指向字符串头部(起始位置)
right 指向字符串尾部(末尾位置)
循环条件:
当 left < right 时,持续比较
字符比较:
如果 ch[left] == ch[right],则 left 右移,right 左移
如果 ch[left] != ch[right],直接返回 false(不是回文串)
终止条件:
当 left >= right 时,说明所有对应字符均相同,返回 true
