首页 > 技术文章 > lintcode-415-有效回文串

libaoquan 2017-08-15 18:35 原文

415-有效回文串

给定一个字符串,判断其是否为一个回文串。只包含字母和数字,忽略大小写。

注意事项

你是否考虑过,字符串有可能是空字符串?这是面试过程中,面试官常常会问的问题。
在这个题目中,我们将空字符串判定为有效回文。

样例

"A man, a plan, a canal: Panama" 是一个回文。
"race a car" 不是一个回文。

挑战

O(n) 时间复杂度,且不占用额外空间。

标签

两根指针 字符串处理 Zenefits 优步 脸书

思路

消除原串中的非字母或数字字符,并将大学字母转换为小写字母,之后便是一般的回文串判断

code

class Solution {
public:
    /*
     * @param s: A string
     * @return: Whether the string is a valid palindrome
     */
    bool isPalindrome(string s) {
        // write your code here
        int size = s.size();
        if (size <= 0) {
            return true;
        }
        int cur = 0;
        for (int i = 0; i < size; i++) {
            if (s[i] <= 'Z' && s[i] >= 'A') {
                s[cur] = s[i] - 'A' + 'a';
                cur++;;
            }
            else if (s[i] <= 'z' && s[i] >= 'a' || s[i] <= '9' && s[i] >= '0') {
                s[cur] = s[i];
                cur++;
            }
        }
        for (int i = 0; i < cur / 2; i++) {
            if (s[i] != s[cur - 1 - i]) {
                return false;
            }
        }
        return true;
    }
};

推荐阅读