1. 程式人生 > >【LeetCode-面試演算法經典-Java實現】【125-Valid Palindrome(迴文字驗證)】

【LeetCode-面試演算法經典-Java實現】【125-Valid Palindrome(迴文字驗證)】

原題

  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'; } }

評測結果

  點選圖片,滑鼠不釋放,拖動一段位置,釋放後在新的視窗中檢視完整圖片。

這裡寫圖片描述

特別說明