【Lintcode】415. Valid Palindrome

題目地址:

https://www.lintcode.com/problem/valid-palindrome/description

給定一個字符串,只考慮字母和數字,字母忽略大小寫區別,忽略所有其他字符,問該字符串是否迴文。直接對撞雙指針,左指針持續右移直到遇到字母或數字,右指針持續左移直到遇到字母或數字,如果指到的兩個字符忽略大小寫後不等,就直接返回false。循環結束後返回true。

public class Solution {
    /**
     * @param s: A string
     * @return: Whether the string is a valid palindrome
     */
    public boolean isPalindrome(String s) {
        // write your code here
        // 判空
        if (s == null || s.isEmpty()) {
            return true;
        }
        // 開兩個變量做左右指針
        int i = 0, j = s.length() - 1;
        while (i < j) {
        	// 注意循環的時候一定要保持左右指針沒有交錯過去
            while (i < j && !Character.isLetterOrDigit(s.charAt(i))) {
                i++;
            }
            while (i < j && !Character.isLetterOrDigit(s.charAt(j))) {
                j--;
            }
            if (Character.toLowerCase(s.charAt(i)) != Character.toLowerCase(s.charAt(j))) {
                return false;
            } else {
                i++;
                j--;
            }
        }
        
        return true;
    }
}

時間複雜度O(n)O(n),空間O(1)O(1)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章