美文网首页
Leetcode.125.Valid Palindrome

Leetcode.125.Valid Palindrome

作者: Jimmy木 | 来源:发表于2019-10-29 09:18 被阅读0次

题目

给定一个字符串, 判断字符串是否是回文, 只考虑字符和数字不考虑标点符号和特殊字符.

Input: "A man, a plan, a canal: Panama"
Output: true
Input: "race a car"
Output: false

思路

双指针, 一个从前向后移动, 一个从后向前移动, 当l >= r时即为回文.
时间复杂度O(n)
空间复杂度O(1)

bool isPalindrome(string s) {
    int n = (int)s.size();
    int l = 0, r = n - 1;
    while (l < r) {
        while (l < r && !isalnum(s[l])) {
            l++;
        }
        while (l < r && !isalnum(s[r])) {
            r--;
        }
        if (tolower(s[l]) != tolower(s[r])) {
            break;
        }
        l++;
        r--;
    }
    return l >= r;
}

总结

注意循环的边界问题, 嵌套循环容易造成无限循环.
熟悉string的API.

isalnum():判断字符是否是字母或数字;
isalpha():判断字符是否是字母;
iscntrl():判断字符是否是控制字符;
isdigit():判断字符是否是数字;
isgraph():判断字符是否是可打印的非空格字符;
ispunct():判断字符是否是标点符号;
isspace():判断字符是否是空白字符;
isupper():判断字符是否是大写字母;
isxdigit():判断字符是否是十六进制数;
toupper():转换为大写字母;
tolower():转换为小写字母。

相关文章

网友评论

      本文标题:Leetcode.125.Valid Palindrome

      本文链接:https://www.haomeiwen.com/subject/plfivctx.html