[LeetCode]Valid Palindrome

本文介绍了一个用于判断字符串是否为回文串的算法,该算法只考虑字符和数字,忽略大小写,并且能够正确处理空字符串和特殊字符组合的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值