125. Valid Palindrome [LeetCode]

本文介绍了一种用于判断字符串是否为回文的有效算法。该算法仅考虑字母数字字符,并忽略大小写。通过实例演示了如何使用C语言库函数进行字符检查及转换,实现了高效判断。

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

125Valid Palindrome

对比LeetCode 20. Valid Parentheses

/**************************************************************************
 * 
 * 125. [Valid Palindrome](https://leetcode.com/problems/valid-palindrome/)
 * 
 * Given a string s, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
 * Example 1:
 * Input: s = "A man, a plan, a canal: Panama"
 * Output: true
 * Explanation: "amanaplanacanalpanama" is a palindrome.
 * 
 * Example 2:
 * Input: s = "race a car"
 * Output: false
 * Explanation: "raceacar" is not a palindrome.
 * 
 **************************************************************************/

// C 库函数 int isalnum(int c) 检查所传的字符是否是字母和数字。
// C 库函数 int tolower(int c) 把给定的字母转换为小写字母。
// int toupper(int c); 
// isalpha Check if character is alphabetic (function )
// isdigit Check if character is decimal digit (function )
// isblank islower isupper

bool isPalindrome(char * s){
    int len = strlen(s);
    if (len < 1) return false;
    if (len == 1 && isalnum(s[0])) return true;
    
    int front = 0;
    int back = len - 1;
    
    while (front < back) {
        while (!isalnum(s[front]) && front < back) front++;
        while (!isalnum(s[back]) && front < back) back--;
        
        if (isupper(s[front])) s[front] += 32;
        if (isupper(s[back]))  s[back] += 32;
        
        if (s[front] != s[back])
            return false;
        front++;
        back--;
    }
    
    return true;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luuyiran

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值