1. 程式人生 > 其它 >驗證迴文串

驗證迴文串

技術標籤:演算法字串javaleetcode演算法

給定一個字串,驗證它是否是迴文串,只考慮字母和數字字元,可以忽略字母的大小寫。
說明:本題中,我們將空字串定義為有效的迴文串。

樣例

示例 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; }