20200414
題目 :驗證回文子串
給定一個字元串,驗證它是否是回文串,隻考慮字母和數字字元,可以忽略字母的大小寫。
**說明:**本題中,我們将空字元串定義為有效的回文串。
示例 :
輸入: "A man, a plan, a canal: Panama"
輸出: true
思路 :利用兩個指針,分别指向頭部和尾部,之後判斷,不斷向中間靠攏。
class Solution{
public boolean isPalindrome(String s){
int left = 0;
int right = s.length()-1;
while(right >= left){
//遇到非數字或字母跳過
if(!Character.isLetterOrDigit(s.charAt(left))){
left++;
continue;
}
if(!Character.isLetterOrDigit(s.charAt(right))){
right--;
continue;
}
//判斷是否相等
if(right>=left && Character.toLowerCase(s.charAt(left)) == Character.toLowerCase(s.charAt(right))){
left++;
right--;
}else{
return false;
}
}
return true;
}
}
更簡潔
public boolean isPalindrome(String s){
String str = s.toLowerCase();
StringBuilder sb = new StringBuilder();
for(char c:str.toCharArray()){
//去除非字母和數字的部分。
if(Character.isLetterOrDigit(c)) sb.append(c);
}
return sb.toString().equals(sb.reverse().toString());
}
參考
leetcode