题干
原题链接:https://leetcode-cn.com/problems/valid-palindrome/
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
注:
“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串
思路
本题有两种解法,一种是从中间到两边去验证(中心扩散法),一种是从两边趋向中间去验证(双指针法),这里讨论第二种解法。
主体思路是设定两个指针,一个在头,一个在尾,验证头尾指针的字符是否相等,若不等,则不是回文串,否则继续验证,直到俩指针在中间相遇。
主体代码入下:
int len = s.length();
int i = 0;
int j = len -1;
while(i<j){
if(s.charAt(i) != s.charAt(j)){
return false;
}
i++;
j--;
}
return true;
又,本题题干只考虑字母和数