首页 > 代码库 > Valid Palindrome

Valid Palindrome

题目:给定一个字符串,判断字符串是否为回文串(只考虑字符和数字,忽略大小写)

算法:设置两个索引,分别从两端向中间扫描,扫描的时候忽略字符和数字以外的一切。

需要注意的是,空字符串也是回文串,而且因为只考虑字符和数字,所以“*/*-”被视为空字符串,所以被认为是回文串

public class Solution {
    /**
     * Check if string is palindrome.
     * <p>Empty String is palindrome, 
     * because palindrome only consider alphanumeric characters,
     * so any string like "*-+*" is consider to be palindrome. 
     * @param s
     * @return
     */
    public boolean isPalindrome(String s) {
        if (null == s) {
            return false;
        }
        if (s.equals("")) {
            return true;
        }
        
        boolean isPalindrome = true;
        int iHead = 0;
        int iTail = s.length() - 1;
        char[] strs = s.toLowerCase().toCharArray();
        while (iHead <= iTail) {
            while (iHead<strs.length 
                && !Character.isLetter(strs[iHead])
                && !Character.isDigit(strs[iHead])) {
                ++iHead;
            }
            while (iTail >= 0 
                && !Character.isLetter(strs[iTail])
                && !Character.isDigit(strs[iTail])) {
                --iTail;
            }
            if (iHead > iTail) {
                break;
            } else if (strs[iHead] != strs[iTail]) {
                return false;
            }
            
            ++iHead;
            --iTail;
        }// end of while
        
        return isPalindrome;
    }
}

Valid Palindrome