1. 程式人生 > 其它 >LeetCode 0125 Valid Palindrome

LeetCode 0125 Valid Palindrome

原題傳送門

1. 題目描述

2. Solution 1

1、思路分析
雙指標,head=0, tail=s.length()-1,逐步向中間靠近。期間只考慮合法字元(跳過非字母及非數字),當兩端都是合法字元時,均轉換為小寫字母進行比較,若不同則為非迴文;不然考慮下一組字元,直到兩個指標重合。

2、程式碼實現

package Q0199.Q0125ValidPalindrome;

public class Solution {
    public boolean isPalindrome(String s) {
        if (s.isEmpty()) return true;
        int head = 0, tail = s.length() - 1;
        char cHead, cTail;
        while (head <= tail) {
            cHead = s.charAt(head);
            cTail = s.charAt(tail);
            if (!Character.isLetterOrDigit(cHead)) {
                head++;
            } else if (!Character.isLetterOrDigit(cTail)) {
                tail--;
            } else {
                if (Character.toLowerCase(cHead) != Character.toLowerCase(cTail))
                    return false;
                head++;
                tail--;
            }
        }
        return true;
    }
}

3、複雜度分析
時間複雜度: O(n)
空間複雜度: O(1)