驗證迴文串
阿新 • • 發佈:2020-12-16
給定一個字串,驗證它是否是迴文串,只考慮字母和數字字元,可以忽略字母的大小寫。
說明:本題中,我們將空字串定義為有效的迴文串。
樣例
示例 1:
輸入: “A man, a plan, a canal: Panama”
輸出: true
示例 2:
輸入: “race a car”
輸出: false
思路分析:
首先字串中多餘的字元不在考慮的範圍之類,判斷字串是迴文串,我們可以設定雙指標,使用雙指標法,一頭一尾判斷字元是否相等,若存在不相等時輸出false。Java程式碼如下:
public boolean isPalindrome (String s) {
s = s.toLowerCase();
if (s.length() <= 1)
return true;
int head = 0;
int end = s.length() - 1;
while (head < end) {
while (!Character.isLetterOrDigit(s.charAt(head)) && head < end)
head++;
while (!Character.isLetterOrDigit (s.charAt(end)) && head < end)
end--;
if (s.charAt(head) != s.charAt(end)) {
return false;
}
else {
head ++;
end --;
}
}
return true;
}
另外也可以用遞迴法,不過在字串很長時,遞迴運算會比較費時間,遞迴法Java程式碼如下:
public boolean isPalindrome (String s) {
s = s.toLowerCase();
if (s.length() <= 1)
return true;
int head = 0;
int end = s.length() - 1;
if (!Character.isLetterOrDigit(s.charAt(head)))
return isPalindrome(s.substring(head + 1,end + 1));
if (!Character.isLetterOrDigit(s.charAt(end)))
return isPalindrome(s.substring(head,end));
if (s.charAt(head) == s.charAt(end)) {
return isPalindrome(s.substring(head + 1, end));
}
else return false;
}