125. 验证回文串https://leetcode.cn/problems/valid-palindrome/
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
字母和数字都属于字母数字字符。
给你一个字符串 s
,如果它是 回文串 ,返回 true
;否则,返回 false
。
题解:
我们首先要预处理,把大小写统一,剔除字母外的干扰字符
然后把预处理完成后的字符串开始两指针押着向中间走,只要一个循环下来没有于是对不上的情况不满足条件自然会跳出返回false
别忘了还有一种非正常跳出循环的方式,就是遇到接不头的,我们怎么区分这两种循环跳出呢
非正常跳出是依然满足循环条件却不循环了,正常跳出是不在满足进入循环的条件了
class Solution {
public boolean isPalindrome(String s) {
s=s.toLowerCase();//统一大小写
String s2="";//剔除非字母字符后存在这
for(int i=0;i<s.length();i++){
char c=s.charAt(i);
if((c>='a'&&c<='z')||(c>='0'&&c<='9')){
s2+=c;
}
}
if(s2=="")return true;//空字符串是回文串
int h=-1;
int t=s2.length();//两个指针都在界外
while(h<t){
h++;
t--;//入界,开始往中间走
if(s2.charAt(h)!=s2.charAt(t)){
break;//只要有一个不相等就停止循环returnfalse,这是非正常跳出的循环
}
}
if(t<=h)return true;//正常跳出循环的会有一个特征就是两个指针相撞了也就是不满足进入循环条件了
return false;
}
}