所谓回文,就是一个正读和反读都一样的字符串。

先假设是验证一个单词 level 是否是回文字符串,通过概念涉及到 正 与 反 ,那么很容易想到使用双指针,从字符的开头和结尾处开始遍历整个字符串,相同则继续向前寻找,不同则直接返回 false。

而这里与单独验证一个单词是否是回文字符串有所区别的是加入了 空格 与 非字母数字的字符,但实际上的做法一样的:

一开始先建立两个指针,left 和 right , 让它们分别从字符的开头和结尾处开始遍历整个字符串。

如果遇到非字母数字的字符就跳过,继续往下找,直到找到下一个字母数字或者结束遍历,如果遇到大写字母,就将其转为小写。

当左右指针都找到字母数字时,可以进行比较的时候,比较这两个字符,如果相等,则两个指针向它们的前进方向挪动,然后继续比较下面两个分别找到的字母数字,若不相等,直接返回 false。

package com.wuyu.java;
 class solution {
	 public boolean isPalinadrome(String s){
		 if(s.length()==0)
			 return true;
		 int l = 0,r=s.length()-1;
		 while(l<r){
			 if(!Character.isLetterOrDigit(s.charAt(1))){
				 l++;
			 }else if(!Character.isLetterOrDigit(s.charAt(r))){
				 r--;
			 }else{
				 if(Character.toLowerCase(s.charAt(l))!=Character.toLowerCase(s.charAt(r)))
					 return false;
				 l++;
				 r--;
			 }
		 }
		 return true;
	 }
}