【LeetCode-面試演算法經典-Java實現】【125-Valid Palindrome(迴文字驗證)】
阿新 • • 發佈:2019-01-29
原題
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
For example,
"A man, a plan, a canal: Panama"
is a palindrome.
"race a car"
is not a palindrome.
Note:
Have you consider that the string might be empty? This is a good question to ask during an interview.
For the purpose of this problem, we define empty string as valid palindrome.
題目大意
給定一個字串,判斷它是否是迴文字串,僅考慮字母,並且忽略大小寫。
解題思路
使用首尾指標,分別找到第一個符合條件的位置,進行比較,如果相等就進行下一組比較,不相等就返回false,直到所有的字母都處理完。
程式碼實現
演算法實現類
public class Solution {
public boolean isPalindrome(String s) {
if (s == null) {
return false;
}
int left = 0;
int right = s.length() - 1;
int delta = 'A' - 'a';
char l;
char r;
while (left < right) {
while (left < s.length() && !isAlphanumericCharacters(s.charAt(left))) { // 從左向右找數字與字母
left++;
}
while (right >= 0 && !isAlphanumericCharacters(s.charAt(right))) { // 從右向左找數字與字母
right--;
}
if (left < right) {
l = s.charAt(left);
r = s.charAt(right);
if (l == r || l - r == delta || r - l == delta) {
left++;
right--;
} else {
return false;
}
}
}
return true;
}
/**
* 判斷是否是字母或者數字
*
* @param c 待判斷的數字
* @return 判斷結果
*/
private boolean isAlphanumericCharacters(char c) {
return c >= '0' && c <= '9' || c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z';
}
}
評測結果
點選圖片,滑鼠不釋放,拖動一段位置,釋放後在新的視窗中檢視完整圖片。